Mon programme fonctionne pas

Résolu/Fermé
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 - Modifié le 3 févr. 2018 à 14:40
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 - 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.

5 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
3 févr. 2018 à 14:41
De mémoire, il n'y as pas de majuscule sur les instructions :
While -> while
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
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.
0
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 3
Modifié le 3 févr. 2018 à 16:46
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.
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
3 févr. 2018 à 16:08
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.

--
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
3 févr. 2018 à 19:10
ha oui tiens, je n'avais pas fait attention.
0
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 3
Modifié le 3 févr. 2018 à 16:47
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 :)
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
Modifié le 3 févr. 2018 à 16:49
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.
0
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 3
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 ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
3 févr. 2018 à 18:44
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.

--
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
3 févr. 2018 à 18:58
Si je peux te donner un conseil, remplace le A/2 et (A-1)/2 par A//2 qui correspond à la division entière par 2. Sinon A va devenir un nombre flottant et quand tu va vouloir convertir des grands nombres, python va arrondir le résultat, ce qu'il ne fera pas avec un entier.
0
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 3
3 févr. 2018 à 19:13
Merci. Personnellement, je lance mon programme en faisant clic droit ouvrir avec, python; je le code avec sublime texte. Comment tu fais pour lancer tes programmes ? S'il te plaît
A quoi sert le "//" ? (pour mieux comprendre ton raisonnement ^^ )
Merci d'avance :)
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
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
0
MiSter_OutFox Messages postés 197 Date d'inscription jeudi 24 novembre 2016 Statut Membre Dernière intervention 10 janvier 2019 3
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 ?
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
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
0