Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2753 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [problème] coder base 2 en base 10

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[problème] coder base 2 en base 10

n°1659043
Universofk​iller
Posté le 16-12-2007 à 19:56:47  profilanswer
 

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
mood
Publicité
Posté le 16-12-2007 à 19:56:47  profilanswer
 

n°1659045
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 16-12-2007 à 19:58:19  profilanswer
 

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
n°1659046
Universofk​iller
Posté le 16-12-2007 à 19:59:33  profilanswer
 

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
n°1659100
Joel F
Real men use unique_ptr
Posté le 16-12-2007 à 23:04:08  profilanswer
 

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 ???

n°1659138
Universofk​iller
Posté le 17-12-2007 à 06:13:34  profilanswer
 

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
n°1659141
Elmoricq
Modérateur
Posté le 17-12-2007 à 07:16:42  profilanswer
 

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
n°1659237
Universofk​iller
Posté le 17-12-2007 à 11:02:24  profilanswer
 

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
n°1659268
Joel F
Real men use unique_ptr
Posté le 17-12-2007 à 11:38:20  profilanswer
 

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

n°1659299
gzii
court-circuit
Posté le 17-12-2007 à 12:01:07  profilanswer
 

Ben si c'est standard non ?

n°1659300
Universofk​iller
Posté le 17-12-2007 à 12:01:40  profilanswer
 

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
mood
Publicité
Posté le 17-12-2007 à 12:01:40  profilanswer
 

n°1659326
Joel F
Real men use unique_ptr
Posté le 17-12-2007 à 13:20:20  profilanswer
 

gzii a écrit :

Ben si c'est standard non ?


 
raw_input o_O ???

n°1659344
gzii
court-circuit
Posté le 17-12-2007 à 13:50:13  profilanswer
 

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.

n°1659387
Joel F
Real men use unique_ptr
Posté le 17-12-2007 à 14:59:57  profilanswer
 

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

n°1659542
Universofk​iller
Posté le 17-12-2007 à 18:49:18  profilanswer
 

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
n°1660024
gzii
court-circuit
Posté le 18-12-2007 à 15:50:14  profilanswer
 

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.

n°1660152
masklinn
í dag viðrar vel til loftárása
Posté le 18-12-2007 à 17:56:00  profilanswer
 

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?


---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
n°1660195
Universofk​iller
Posté le 18-12-2007 à 19:17:36  profilanswer
 

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
n°1660216
Universofk​iller
Posté le 18-12-2007 à 20:11:59  profilanswer
 

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
n°1660233
gzii
court-circuit
Posté le 18-12-2007 à 21:11:26  profilanswer
 

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.

n°1660239
Universofk​iller
Posté le 18-12-2007 à 21:32:26  profilanswer
 

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


---------------
Ventes / Feedback
n°1660353
gzii
court-circuit
Posté le 18-12-2007 à 22:32:22  profilanswer
 

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)

n°1660357
gzii
court-circuit
Posté le 18-12-2007 à 22:33:40  profilanswer
 

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).

n°1660448
masklinn
í dag viðrar vel til loftárása
Posté le 19-12-2007 à 08:24:52  profilanswer
 

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]


---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
n°1660902
Universofk​iller
Posté le 19-12-2007 à 23:08:32  profilanswer
 

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


---------------
Ventes / Feedback
n°1660944
masklinn
í dag viðrar vel til loftárása
Posté le 20-12-2007 à 08:22:35  profilanswer
 

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.


---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [problème] coder base 2 en base 10

 

Sujets relatifs
[C++] Problème d'allocation dynamique[C#] Problème d'emulation sur Visual Studio (Windows CE 5.0)
Problème avec un select[c++][resolu]Problème de compilation.
($résolu = 'ok') probleme avec FALSE et TRUEProbleme sur la suite de conway en java !
Problème de cache navigateur - iFrameRé-ordonner ma base de données
[Delphi] Problème dans un code / N'affiche jamais la variable 
Plus de sujets relatifs à : [problème] coder base 2 en base 10


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR