[problème] coder base 2 en base 10

coder base 2 en base 10 [problème] - Python - Programmation

Marsh Posté le 16-12-2007 à 19:56:47    

Salut, alors voila, je débute le python cette année avec la fac.
Malheureusement, mon prof ne nous aide pas, il reste sur ebay.

 

Donc voila, je dois créer un petit programme qui :
-demande à l'utilisateur une chaine de caractères en base 2(ça, pas de problèmes, presque)
-récupère cette chaine et la code en base  10(et la, je sais pas ce qu'il faut que je fasse pour coder la base à part utiliser def)
-donne la traduction en base 10 à l'utilisateur (la encore, pas de problèmes :) )

 

Mon plus gros problème en réalité (et donc qui me bloque pour ma conversion ensuite) est que je ne connais pas une fonction qui récupère un seul caractère de la chaine
De meme, je n'en connais pas qui reconnait la position du caractere

 

Il me faudrait donc juste savoir quelle "balise" permet cela, après, c'est a moi de réfléchir

 

Merci d'avance pour votre aide.

 

PS : je vous demande juste comment passer de la base 2 à la base 10.

 

PS 2 : j'aurai une autre question :
Comment récupérer une chaine de caractères et l'afficher dans le sens inverse?(par exemple, je prend la chaine : "123abc" puis j'affiche cba321" )


Message édité par Universofkiller le 16-12-2007 à 20:19:32

---------------
Ventes / Feedback
Reply

Marsh Posté le 16-12-2007 à 19:56:47   

Reply

Marsh Posté le 16-12-2007 à 19:58:19    

Sur ce forum, on ne fait pas ton travail a ta place. Si tu as un problème lors de la conception, on t'aidera mais jamais nous ne ferons ton programme en entier.


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 16-12-2007 à 19:59:33    

justement, je ne demande pas le programme entier, juste qu'on m'explique la partie qui ne va pas...
Je voudrais simplement savoir comment passer de la base 2 a la base 10 car on en nous a rien dit a ce sujet, pareil pour l'inversion de caractères


Message édité par Universofkiller le 16-12-2007 à 19:59:58

---------------
Ventes / Feedback
Reply

Marsh Posté le 16-12-2007 à 23:04:08    

un nombre en base 2 s'écrit : bnbn-1....b1b0
sa valeur est donnée par :
 
Somme(i=0...n) bi*2^i
Ex :
 
10011 = 1*2^4 + 1 *2^1 + 1*2^0 = 1 + 2 +16 =19
 
Pour un nombre ne base 10, c'est idem :
 
159 = 1* 10^3 + 5*10^2 + 9*10^0  
 
Donc le passage base 2->base 10
se fait en sommant les puissances de 2 pour lesquels le bit est à 1.
 
C'ets pas au programme de la fac ça genre, L1 math info ???

Reply

Marsh Posté le 17-12-2007 à 06:13:34    

Salut, en fait, ça je le sais, mais justement, je ne sais pas comment récupérer la position du nombre, car c'est ce dont j'ai besoin pour ensuite le mettre a la puissance "x".
Car le python est aussi dans mon programme, malheureusement, mon prof va sur ebay et ne nous aide pas du tout... Il nous file la feuille de TP puis on se débrouille.

 

Je suis pas en math info, je suis en section "polytech", c'est un petit mélange de spc et math info

 

S'il vous plait, ne répondez plus, j'ai peut etre une idée, je vous la soumettrez en rentrant, après vous me direz ce que vous en pensez, merci


Message édité par Universofkiller le 17-12-2007 à 06:28:00

---------------
Ventes / Feedback
Reply

Marsh Posté le 17-12-2007 à 07:16:42    

Il faut vraiment que tu le fasses à la main, ou tu dois juste convertir ton nombre ?
 
Parce que si c'est juste ça ta question :  

Citation :

PS : je vous demande juste comment passer de la base 2 à la base 10.


 
Alors un coup de google me retourne ce lien : http://python.developpez.com/faq/?page=Nombres
 
Et si tu dois le faire toi-même, en découpant la chaîne, une nouvelle recherche sous google me retourne ceci : http://www.ebgm.jussieu.fr/~fuchs/python/strings.html


Message édité par Elmoricq le 17-12-2007 à 07:18:12
Reply

Marsh Posté le 17-12-2007 à 11:02:24    

Merci pour tes liens elmoricq, je vais les regarder tout de suite/
Sinon, je ne comprend pas trop ta question, je dois en effet convertir le nombre, mais qu'entends tu par "le faire à la main"?

 

Ps : j'ai déja chercher dans google, mais sans résultats satifsfaisants, c'est pour cela que je me suis tourné vers le forum

 

PS  2 : on utilise raw_input pour définir la chaine car c'est un utilisateur qui est censé mettre la chaine qu'il souhaite.
(on commence notre code par :

Citation :


n=raw_input("sasir une chaine de caracteres : " )

 

Merci beaucoup, au final, ça donne ceci :

Citation :


n=raw_input("sasir une chaine de caracteres : " )
s=int (n,2)

 

print s


Il ne me manque plus qu'une condition qui ne prenne en compte que les  1 :) je suis en train de tester diverses choses.

 

Merci beaucoup, je mettrai a jour le script dès que j'aurai trouvé :)


Message édité par Universofkiller le 17-12-2007 à 11:18:11

---------------
Ventes / Feedback
Reply

Marsh Posté le 17-12-2007 à 11:38:20    

on parle de code source pas de script :roll:
 
et raw_input, c'ets pas standard, ca sort d'ou ?

Reply

Marsh Posté le 17-12-2007 à 12:01:07    

Ben si c'est standard non ?

Reply

Marsh Posté le 17-12-2007 à 12:01:40    

raw_input sert à demander à l'utilisateur d'entrer une chaine de caracteres si j'ai bien compris.
Désolé pour "script", c'est l'habitude ^^
Donc, voila ce que j'obtiens pour le moment, mais il y a une petite erreur, j'essaye de la résoudre :

Citation :


n=raw_input("Saisir une chaine de caracteres : " )
z= 1 or 0
compteur= 0
x=len(n)
s=int(a,2)
while compteur < x:
 if n[compteur] == z:
  n[compteur] = a
  a=a + n[compteur]
  compteur = compteur+1
 
 break

 

print s

 



L'erreur est que je ne définis pas le "a" dès le début, ce qui fait qu'il ne le reconnait pas, pourtant, j'en ai besoin pour que le programme trie les 0 et les 1 du reste.
Je pense qu'il faut modifier

Citation :

s=int(a,2)

, mais la je vois pas quoi faire ^^, je creuse ma tete a la recherche d'une petite idée


Message édité par Universofkiller le 17-12-2007 à 12:04:19

---------------
Ventes / Feedback
Reply

Marsh Posté le 17-12-2007 à 12:01:40   

Reply

Marsh Posté le 17-12-2007 à 13:20:20    

gzii a écrit :

Ben si c'est standard non ?


 
raw_input o_O ???

Reply

Marsh Posté le 17-12-2007 à 13:50:13    

http://docs.python.org/lib/built-in-funcs.html
 

Citation :


raw_input(   [prompt])
    If the prompt argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that. When EOF is read, EOFError is raised. Example:

Code :
  1. >>> s = raw_input('--> ')
  2.     --> Monty Python's Flying Circus
  3.     >>> s
  4.     "Monty Python's Flying Circus"


    If the readline module was loaded, then raw_input() will use it to provide elaborate line editing and history features.

Reply

Marsh Posté le 17-12-2007 à 14:59:57    

oh putain je me croyais en C :E désolé :o

Reply

Marsh Posté le 17-12-2007 à 18:49:18    

Salut, alors voila ce que j'ai fait :

Citation :

n=raw_input("Saisir une chaine de caracteres : " )
z= 1 or 0
compteur= 0
x=len(n)
a=0
s=int(a,2)
print len(n)
while compteur < x:
 if n[compteur] == z:
  a= a+n[compteur]
  s=int(a,2)
 
 compteur = compteur+1
print s

 




mais, il y a une erreur, je vois pas comment faire autrement.
De toutes façons, je pense que je suis allé plus loin que ce qui est demandé

 

Par contre, si quelqu'un sait comment récupérer chaque caractere de la chaine et connaitre sa position, j'aimerai bien savoir quelle "balise" utiliser

Message cité 1 fois
Message édité par Universofkiller le 17-12-2007 à 22:21:34

---------------
Ventes / Feedback
Reply

Marsh Posté le 18-12-2007 à 15:50:14    

Qu'est-ce que tu veux faire ?
Je n'ai pas tout compris.
 
Si tu veux juste convertir le binaire saisi en entier et l'afficher en décimal, il suffit de vérifier que la chaîne contient bien des 0 et des 1, puis de la convertir avec ta fonction s=int(n,2), puis d'afficher s non ?
 
Pourquoi tu affectes 1 à z et qu'ensuite tu testes sa valeur ?
Je n'ai pas tout compris.

Reply

Marsh Posté le 18-12-2007 à 17:56:00    

Universofkiller a écrit :

Salut, alors voila ce que j'ai fait :

Citation :

n=raw_input("Saisir une chaine de caracteres : " )
z= 1 or 0
compteur= 0
x=len(n)
a=0
s=int(a,2)
print len(n)
while compteur < x:
 if n[compteur] == z:
  a= a+n[compteur]
  s=int(a,2)
 
 compteur = compteur+1
print s
 
 


mais, il y a une erreur, je vois pas comment faire autrement.
De toutes façons, je pense que je suis allé plus loin que ce qui est demandé


C'est censé faire quoi cette horreur exactement?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-12-2007 à 19:17:36    

Ben en fait, c'est censé vérifier que la chaine ne contient que des 0 et des 1
Je vois pas comment faire autrement en fait, si vous pouviez éclairer ma lanterne s'il vous plait

 

Voila ce que je viens de faire :

Citation :


n=raw_input("saisir : " )
a=len(n)
i=0
while i<a :
 if n[i]==0 or n[i]==1 :
  print int(n,2)
 i=i+1


malheureusement, ça ne m'affiche que ce qui est dans raw input (c'est a dire, les chiffres que je rentre.)
savez vous pourquoi?

Message cité 1 fois
Message édité par Universofkiller le 18-12-2007 à 20:10:27

---------------
Ventes / Feedback
Reply

Marsh Posté le 18-12-2007 à 20:11:59    

gzii a écrit :


 
Si tu veux juste convertir le binaire saisi en entier et l'afficher en décimal, il suffit de vérifier que la chaîne contient bien des 0 et des 1, puis de la convertir avec ta fonction s=int(n,2), puis d'afficher s non ?
 


c'est exactement ce que je tente de faire ^^


---------------
Ventes / Feedback
Reply

Marsh Posté le 18-12-2007 à 21:11:26    

Là tu affiches juste chaque chiffre vérifié,
alors qu'il faut d'abord vérifier qu'il n'y ait que des 0 et des 1 sinon erreur,
puis ensuite convertir la chaîne entière, et non les chiffres un par un.

Reply

Marsh Posté le 18-12-2007 à 21:32:26    

merci
mais, je ne vois pas comment faire, j'y ai passé un bon moment, sans résultats


---------------
Ventes / Feedback
Reply

Marsh Posté le 18-12-2007 à 22:32:22    

Tu mets une variable à une valeur donnée si un des éléments de la chaine est différent de 0 et de 1, et si elle n'est pas à cette nouvelle valeur c'est que c'est bon,
et ensuite tu fais la conversion avec le int(x,base)

Reply

Marsh Posté le 18-12-2007 à 22:33:40    

Il y'a aussi possibilité de se faire une petite fonction qui fait le raw_input et qui vérifie par rapport à une expression régulière mais bon ce sera pour plus tard (à moins que ça existe déjà dans le langage ? Pas encore vu).

Reply

Marsh Posté le 19-12-2007 à 08:24:52    

Universofkiller a écrit :

Ben en fait, c'est censé vérifier que la chaine ne contient que des 0 et des 1


Quel intérêt ça a?
 
Le builtin int génère une erreur si il n'arrive pas à parser la chaîne, donc en base 2 si la chaîne contient autre chose que des 0 et des 1:

Code :
  1. >>> int("011", 2)
  2. 3
  3. >>> int("012", 2)
  4.  
  5. Traceback (most recent call last):
  6.  File "<pyshell#1>", line 1, in <module>
  7.    int("012", 2)
  8. ValueError: invalid literal for int() with base 2: '012'
  9. >>>


 
Donc suffit d'écrire un truc du style

Code :
  1. >>> def from_bin(s):
  2.     try:
  3.         return int(s, 2)
  4.     except ValueError:
  5.         print "The string wasn't the representation of a number in binary"
  6.  
  7.         
  8. >>> from_bin("01001101011" )
  9. 619
  10. >>> from_bin("foo" )
  11. The string wasn't the representation of a number in binary
  12. >>> from_bin("123" )
  13. The string wasn't the representation of a number in binary
  14. >>>


[:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-12-2007 à 23:08:32    

ok merci, je testerai ça.
je connaissais pas "try" et except ^^ (on nous fait vraiment une initiation de base)


---------------
Ventes / Feedback
Reply

Marsh Posté le 20-12-2007 à 08:22:35    

Je pense que ce serait une bonne idée que tu lises le Python Tutorial, il est filé avec python et tu peux le trouver sur le site officiel.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed