Menu

Mon programme fonctionne pas [Résolu]

MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - 3 févr. 2018 à 14:01 - Dernière réponse : MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention
- 3 févr. 2018 à 19:51
Bonjour,
J'ai codé vite-fait un programme python pour convertir un nombre normale en binaire, le problème c'est qu'il ne fonctionne pas :/
Je suis débutant, donc je pense que c'est une erreur de base. Quand j'ouvre mon programme avec python, j'arrive à distinguer qu'il me dit : " File : "*Localisation de mon programme*", line 4 ". J'ai cherché, mais je n'ai pas trouvé pourquoi il y a une erreur.
Voici le programme :
A = Input("Nommbre à convertir :")
X = 0
C = 1
While A > 0:
 If(A%2=0):
  A/2 = A
  C*10 = C
 Else :
  (A-1)/2 = A
  X+C = X
  C*10 = C
print(X)



Merci d'avance de votre aide.



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

16 réponses

NHenry 14172 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 mai 2018 Dernière intervention - 3 févr. 2018 à 14:41
0
Utile
De mémoire, il n'y as pas de majuscule sur les instructions :
While -> while
Whismeril 11517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 mai 2018 Dernière intervention - 3 févr. 2018 à 15:18
Bonjour, je confirme.
C'est le cas pour if et else aussi.
D'autre part, en python et dans de nombreux langages, il y a un différence de syntaxe entre l'égalité entre 2 variables et l'affectation de valeur
A=2 veut dire qu'on affecte 2 à 1
A==2 veut dire que l'on teste si la valeur de A est 2.

Je ne sais pas avec quoi tu codes, mais un bon éditeur (même gratuit) te signale à minima les lignes où la syntaxe est erronée.

Par exemple, avec spyder, il y a une croix en marge quand la ligne présente une erreur

Dans cette capture, les instructions en minuscules sont reconnues, donc affichées en bleu.
La ligne 5 présente l'erreur d'égalité, il y a une croix.
Commenter la réponse de NHenry
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - Modifié par NHenry le 3/02/2018 à 16:46
0
Utile
Tout d'abord, merci de votre aide. Effectivement, j'ai l'habitude de mettre des majuscules partout ^^. Je code avec sublime texte. Les 2 égales, bah je m'en souvenait plus x) (En même temps j'utilise une calculatrice Ti-83 CE, dont le codage est "un peu familier" et du coup je n'ai pas mit les 2 égales).
En ayant réglé ces problèmes j'ai une nouvelle erreur à la ligne 6...
Voici le code :

A = Input("Nommbre à convertir :")
X = 0
C = 1
while A > 0:
 if(A%2==0):
  A/2 = A
  C*10 = C
 else:
  (A-1)/2 = A
  X+C = X
  C*10 = C
print(X)


Encore merci de votre aide :)




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Commenter la réponse de MiSter_OutFox
quent217 227 Messages postés vendredi 25 septembre 2015Date d'inscription 6 avril 2018 Dernière intervention - 3 févr. 2018 à 16:08
0
Utile
Bonjour,
en plus des erreurs qui ont déjà été signalé, je rajoute qu'une affectation de variable se fait avec le nom de la variable devant le signe =. C'est à dire qu'il faut remplacer A/2 = A par A = A/2.
De plus si tu utilise python3, la fonction input renvoie toujours un type string, il faut donc le convertir en entier avec la fonction int.
Whismeril 11517 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 mai 2018 Dernière intervention - 3 févr. 2018 à 19:10
ha oui tiens, je n'avais pas fait attention.
Commenter la réponse de quent217
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - Modifié par NHenry le 3/02/2018 à 16:47
0
Utile
Merci de ton aide.
J'en apprend de plus en plus x) Je ne connaissais pas l'histoire de l'affection de variable... ça me sera utile. De même pour le input. Merci ^^
En corrigeant cela, ça donne :

A = Input("Nommbre à convertir :")
X = 0
C = 1
while A > 0:
 if(A%2==0):
  A = A/2
  C = C*10
 else:
  A = (A-1)/2
  X = X + C
  C = C*10
print(int(X)) 


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


Le problème, c'est que maintenant j'ai l'erreur suivante : "Traceback (most recent call last):"

Merci du temps accordé à mon égard :)
NHenry 14172 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 19 mai 2018 Dernière intervention - 3 févr. 2018 à 16:47
C'est bien, ça te donne la pile des appels, mais sans erreur ni emplacement, pas possible d'aider.

Et Quent217 t'indique que Input retourne une chaine pas un entier, il faut donc faire la conversion.

Merci aussi de penser à la coloration syntaxique, j'ai modifié tes 3 messages sur ce point.
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - 3 févr. 2018 à 18:09
Je suis tête en l'air ^^ J'ai lu "input" et j'ai pensé à "print", alors j'ai remplacé pour "print"...
Pour la coloration syntaxique, j'avais pas vu (et je connaissais pas), désolé, mais merci c'est plus simple de compréhension :)
Du coup, j'ai remplacé, et maintenant ça me demande bien le nombre à convertir, mais ça n'affiche pas le résultat :/
Le code :

A = int(input("Nommbre à convertir :"))
X = 0
C = 1
while A > 0:
	if(A%2==0):
		A = A/2
		C = C*10
	else:
		A = (A-1)/2
		X = X + C
		C = C*10
print(X)


Merci encore ^^
Commenter la réponse de MiSter_OutFox
quent217 227 Messages postés vendredi 25 septembre 2015Date d'inscription 6 avril 2018 Dernière intervention - 3 févr. 2018 à 18:44
0
Utile
Je viens de copier coller ton code et il fonctionne très bien.
Je ne sais pas d'où viens ton problème mais apparemment pas du code.
quent217 227 Messages postés vendredi 25 septembre 2015Date d'inscription 6 avril 2018 Dernière intervention - 3 févr. 2018 à 19:20
Pour lancer le programme j'ouvre tout simplement une invite de commande et j’écris le nom du fichier.
Peut-être que tu double-clique sur le fichier, au quel cas c'est normal que la console se ferme directement après que tu ai entré le nombre à convertir car c'est la fin du programme.

le // permet de calculer une division entière (on calcul le quotient avec // et le modulo avec %) et ça renvoie donc un entier
4/2 -> 2.0
4//2 -> 2
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - 3 févr. 2018 à 19:25
Oui ! ça fonctionne avec la cmd, c'est plus simple x) Merci ! Et effectivement, les // seront mieux du coup :) Si je me trompe pas, du coup je mettrais A//2 et (A-1)//2, c'est bien cela ?
quent217 227 Messages postés vendredi 25 septembre 2015Date d'inscription 6 avril 2018 Dernière intervention - 3 févr. 2018 à 19:33
Ce n'est pas la peine de faire (A-1)//2 car A est impair donc la division entière par 2 donnera la même chose que A//2.
par exemple si je fais la division entière de 3 par 2 ça donne 1 soit exactement la même chose que 2 diviser par 2.
Tu peux donc en déduire aussi qu'il est inutile d'écrire A//2 dans chaque cas, il suffit de le faire 1 fois après la fin du else
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - 3 févr. 2018 à 19:37
Okiii ! J'ai compris ! :) Merci beaucoup de ton aide :)
Bonne soirée ! ;)

PS :
Pour ceux qui veulent le programme de fin du coup :

A = int(input("Nombre à convertir :"))
X = 0
C = 1
while int(A) > 0:
 if(A%2==0):
  C = C*10
 else:
  X = X + C
  C = C*10
 A = A//2
print(X)
MiSter_OutFox 189 Messages postés jeudi 24 novembre 2016Date d'inscription 3 février 2018 Dernière intervention - 3 févr. 2018 à 19:51
Et le programme inverse, du binaire au nombre :

A = int(input('Binaire à convertir :'))
B = 1
X = 0
while A-B>0:
	B = B*10
B = B//10
C = B-1
while A>0:
	if A>C:
		A = A-B
		B = B//10
		C = C//10
		X = X*2+1
	else:
		B = B//10
		C = C//10
		X = X*2
print(X)
Commenter la réponse de quent217