Bonjour, je suis en train ce créer un programme afin de convertir des bases 2, 10 et 16 entre elles.
Pour ce faire, j'ai eu nottament besoin d'uttiliser 2 chaines.
Je voudrais pouvoir lescontroler distinctement car a un endroit. Je fait breakpour arreter une boucle, et c'est l'autre qui s'arrete.
voila mon programme avec l'endroit problematique entre #
while True:
base = int(input("base"))
if base == 16 :
nombre = str(input("nombre"))
convert = int(input("convertion"))
if convert == 2 :
a = conversion_hexa_binaire(nombre)
print(a)
break
elif convert == 10 :
a = conversion_hexa_decimal(nombre)
print(a)
break
else :
print("ERREUR")
continue
elif base == 10 :
nombre = int(input("nombre"))
convert = int(input("convertion"))
if convert == 2 :
a = conversion_deci_binaire(nombre)
print(a)
break
elif convert == 16 :
a = conversion_deci_hexa(nombre)
print(a)
break
else :
print("ERREUR")
continue
elif base == 2 :
nombre = int(input("nombre"))
nombre = str(nombre)
for s in nombre:
if s not in "01":
print("Erreur")
continue
else:
convert = int(input("convertion"))
if convert == 16 :
a = conversion_binaire_hexa(nombre)
print(a)
b = str(input("reconvertir: oui/non"))
if b == "oui" :
continue
elif b == "non" :
break
else :
print("ERREUR")
break
elif convert == 10 :
a = conversion_binaire_decimal(nombre)
print(a)
break
else :
print("ERREUR")
continue
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Izac
Bonjour, Le 20/11/2021 Í 13:56, Mat a écrit dans le message  :
Bonjour, je suis en train ce créer un programme afin de convertir des bases 2, 10 et 16 entre elles. Pour ce faire, j'ai eu nottament besoin d'uttiliser 2 chaines. Je voudrais pouvoir lescontroler distinctement car a un endroit. Je fait breakpour arreter une boucle, et c'est l'autre qui s'arrete. voila mon programme avec l'endroit problematique entre #
[…] Je n'ai pas tout lu, c'est trop compliqué, ça fait mal Í la tête ;-) [Non testé c'est juste pour donner l'idée] def convert(nb, base_in, base_out): nb_int = int(nb, base_in) # on converti en un entier if base_out == 2: return bin(nb_int) # représention binaire if base_out == 16: return hex(nb_int) # représentation hexadécimale return nb_int while True: base_entree = int(input("Base du nombre en entrée ? ")) base_sortie = int(input("Base du nombre en sortie ? ")) nombre_entree = input("Nombre Í convertir ? ") print(convert(nombre_entree, base_entree, base_sortie)) Sinon, pour ton problème, je pense qu'il te faut ajouter une condition après ton for, un truc du genre if tout_est_ok: break avec tout_est_ok passé Í True dans ton for avant ton break. Mais ça reste très compliqué. Dès que l'on voit les répétitions nombre = int(input("nombre")) convert = int(input("convertion")) on se dit qu'il y a un problème. Après, tu peux t'amuser Í recoder bin() et hex() pour le fun, c'est un bon exercice. -- Benoit Izac
Bonjour,
Le 20/11/2021 Í 13:56, Mat a écrit dans le message
<AIWdndYoisELbQX8nZ2dnUU798zNnZ2d@giganews.com>Â :
Bonjour, je suis en train ce créer un programme afin de convertir des
bases 2, 10 et 16 entre elles.
Pour ce faire, j'ai eu nottament besoin d'uttiliser 2 chaines.
Je voudrais pouvoir lescontroler distinctement car a un endroit. Je fait
breakpour arreter une boucle, et c'est l'autre qui s'arrete.
voila mon programme avec l'endroit problematique entre #
[…]
Je n'ai pas tout lu, c'est trop compliqué, ça fait mal Í la tête ;-)
[Non testé c'est juste pour donner l'idée]
def convert(nb, base_in, base_out):
nb_int = int(nb, base_in) # on converti en un entier
if base_out == 2:
return bin(nb_int) # représention binaire
if base_out == 16:
return hex(nb_int) # représentation hexadécimale
return nb_int
while True:
base_entree = int(input("Base du nombre en entrée ? "))
base_sortie = int(input("Base du nombre en sortie ? "))
nombre_entree = input("Nombre Í convertir ? ")
print(convert(nombre_entree, base_entree, base_sortie))
Sinon, pour ton problème, je pense qu'il te faut ajouter une condition
après ton for, un truc du genre
if tout_est_ok:
break
avec tout_est_ok passé Í True dans ton for avant ton break. Mais ça
reste très compliqué. Dès que l'on voit les répétitions
nombre = int(input("nombre"))
convert = int(input("convertion"))
on se dit qu'il y a un problème.
Après, tu peux t'amuser Í recoder bin() et hex() pour le fun, c'est un
bon exercice.
Bonjour, Le 20/11/2021 Í 13:56, Mat a écrit dans le message  :
Bonjour, je suis en train ce créer un programme afin de convertir des bases 2, 10 et 16 entre elles. Pour ce faire, j'ai eu nottament besoin d'uttiliser 2 chaines. Je voudrais pouvoir lescontroler distinctement car a un endroit. Je fait breakpour arreter une boucle, et c'est l'autre qui s'arrete. voila mon programme avec l'endroit problematique entre #
[…] Je n'ai pas tout lu, c'est trop compliqué, ça fait mal Í la tête ;-) [Non testé c'est juste pour donner l'idée] def convert(nb, base_in, base_out): nb_int = int(nb, base_in) # on converti en un entier if base_out == 2: return bin(nb_int) # représention binaire if base_out == 16: return hex(nb_int) # représentation hexadécimale return nb_int while True: base_entree = int(input("Base du nombre en entrée ? ")) base_sortie = int(input("Base du nombre en sortie ? ")) nombre_entree = input("Nombre Í convertir ? ") print(convert(nombre_entree, base_entree, base_sortie)) Sinon, pour ton problème, je pense qu'il te faut ajouter une condition après ton for, un truc du genre if tout_est_ok: break avec tout_est_ok passé Í True dans ton for avant ton break. Mais ça reste très compliqué. Dès que l'on voit les répétitions nombre = int(input("nombre")) convert = int(input("convertion")) on se dit qu'il y a un problème. Après, tu peux t'amuser Í recoder bin() et hex() pour le fun, c'est un bon exercice. -- Benoit Izac
Alain Ketterlin
Mat83 writes:
Bonjour, je suis en train ce créer un programme afin de convertir des écritures en base 2, 10 et 16 entre elles. Pour ce faire, j'ai eu notamment besoin d'utiliser 2 chaÍ®nes. Je voudrais pouvoir les contrÍ´ler distinctement car a un endroit je fais break pour arrêter une boucle, et c'est l'autre qui s'arrête.
Une instruction break arrête la boucle la plus proche, c'est tout. (En Java on peu nommer les boucles et arrêter n'importe laquelle, mais pas en Python. En Python on peut écrire "for ... else ..." et "while ... else ...", avec la partie "else" exécutée seulement si la boucle qui précède n'a pas exécuté un "break" -- donc juste le contraire de ce que tu veux -- de toute façon, seuls les illuminés utilisent ce truc.)
voila mon programme avec l'endroit problematique entre #
Il n'y a pas de # dans ton code. Mais comme il n'y a que deux boucles... Ta structure est la suivante : while True: ... for s in nombre: ... Note que pour sortir du while, il faut déjÍ sortir du for, et aussi garder l'information qu'il faut aussi sortir du while. Tu vas donc arriver Í une structure du genre : interrompu = False while True: ... for s in nombre: ... if ... interrompu = True break ... if interrompu: break ... (Et donc, on peut sÍ»rement écrire mieux que "while True".) C'est assez compliqué Í relire. Le mieux est sÍ»rement de placer la boucle for dans une fonction qui renvoie un booléen qui indique si il faut continuer ou pas : while True: ... if not fonction_contenant_le for (...): break ... Mais voir plus bas pour une remarque sur la logique de ton code. Autre chose :
while True: base = int(input("base")) if base == 16 : nombre = str(input("nombre")) convert = int(input("convertion")) if convert == 2 : a = conversion_hexa_binaire(nombre) print(a) break elif convert == 10 : a = conversion_hexa_decimal(nombre) print(a) break
[...] Ce n'est pas très malin d'écrire des fonctions comme "conversion_hex_decimal", puisqu'il n'y a pas de rapport direct entre les deux écritures. Il vaut donc mieux passer par un entier (int), et écrire d'un part : - str_to_int (s, b) (transformer une écriture en base b en un int) - int_to_str (i, b) (transformer un int en son écriture en base b) puisque ces conversions sont très similaires pour les différentes bases. Ton programme deviendrait : while ...: base = int (input ("base")) ecriture = input ("écrture du nombre") convert = int (input ("convert")) valeur = str_to_int (ecriture, base) resultat = int_to_str (valeur, convert) ... Et effectivement, il y a des fonctions standard pour faire ça : - int (s, b) calcule str_to_int (s, b) - "{0:b}".format (i) calcule int_to_str (i, 2) (et on écrit "{0:d}" pour décimal, et "{0:x}" pour hexadécimal) (Note que les fonctions bin() et hex() font le même travail mais ajoutent un préfixe Í la chaÍ®ne résultante.) Enfin : [...]
elif base == 2 : nombre = int(input("nombre")) nombre = str(nombre) for s in nombre: if s not in "01": print("Erreur") continue
[...] Ton "continue" passe au "tour" suivant de la boucle for. Ce que signifie ce code c'est : "si un chiffre n'est pas correct, passer au chiffre suivant". Ça n'a pas l'air correct. (Et la partie "else" -- supprimée ici -- est encore moins compréhensible). (On ne voit pas bien non plus pourquoi on ne fait pas un test similaire des chiffres utilisés pour les autres bases. Au passage, c'est facile Í faire dans la fonction str_to_int().) -- Alain.
Bonjour, je suis en train ce créer un programme afin de convertir des
écritures en base 2, 10 et 16 entre elles.
Pour ce faire, j'ai eu notamment besoin d'utiliser 2 chaͮnes. Je
voudrais pouvoir les contrÍ´ler distinctement car a un endroit je fais
break pour arrêter une boucle, et c'est l'autre qui s'arrête.
Une instruction break arrête la boucle la plus proche, c'est tout.
(En Java on peu nommer les boucles et arrêter n'importe laquelle, mais
pas en Python. En Python on peut écrire "for ... else ..." et "while ...
else ...", avec la partie "else" exécutée seulement si la boucle qui
précède n'a pas exécuté un "break" -- donc juste le contraire de ce que
tu veux -- de toute façon, seuls les illuminés utilisent ce truc.)
voila mon programme avec l'endroit problematique entre #
Il n'y a pas de # dans ton code. Mais comme il n'y a que deux boucles...
Ta structure est la suivante :
while True:
...
for s in nombre:
...
Note que pour sortir du while, il faut déjÍ sortir du for, et aussi
garder l'information qu'il faut aussi sortir du while. Tu vas donc
arriver Í une structure du genre :
interrompu = False
while True:
...
for s in nombre:
...
if ...
interrompu = True
break
...
if interrompu:
break
...
(Et donc, on peut sÍ»rement écrire mieux que "while True".)
C'est assez compliqué Í relire. Le mieux est sÍ»rement de placer la
boucle for dans une fonction qui renvoie un booléen qui indique si il
faut continuer ou pas :
while True:
...
if not fonction_contenant_le for (...):
break
...
Mais voir plus bas pour une remarque sur la logique de ton code.
Autre chose :
while True:
base = int(input("base"))
if base == 16 :
nombre = str(input("nombre"))
convert = int(input("convertion"))
if convert == 2 :
a = conversion_hexa_binaire(nombre)
print(a)
break
elif convert == 10 :
a = conversion_hexa_decimal(nombre)
print(a)
break
[...]
Ce n'est pas très malin d'écrire des fonctions comme
"conversion_hex_decimal", puisqu'il n'y a pas de rapport direct entre
les deux écritures. Il vaut donc mieux passer par un entier (int), et
écrire d'un part :
- str_to_int (s, b) (transformer une écriture en base b en un int)
- int_to_str (i, b) (transformer un int en son écriture en base b)
puisque ces conversions sont très similaires pour les différentes bases.
Ton programme deviendrait :
while ...:
base = int (input ("base"))
ecriture = input ("écrture du nombre")
convert = int (input ("convert"))
valeur = str_to_int (ecriture, base)
resultat = int_to_str (valeur, convert)
...
Et effectivement, il y a des fonctions standard pour faire ça :
- int (s, b) calcule str_to_int (s, b)
- "{0:b}".format (i) calcule int_to_str (i, 2) (et on écrit "{0:d}" pour
décimal, et "{0:x}" pour hexadécimal)
(Note que les fonctions bin() et hex() font le même travail mais ajoutent
un préfixe Í la chaÍ®ne résultante.)
Enfin :
[...]
elif base == 2 :
nombre = int(input("nombre"))
nombre = str(nombre)
for s in nombre:
if s not in "01":
print("Erreur")
continue
[...]
Ton "continue" passe au "tour" suivant de la boucle for. Ce que signifie
ce code c'est : "si un chiffre n'est pas correct, passer au chiffre
suivant". Ça n'a pas l'air correct. (Et la partie "else" -- supprimée
ici -- est encore moins compréhensible).
(On ne voit pas bien non plus pourquoi on ne fait pas un test similaire
des chiffres utilisés pour les autres bases. Au passage, c'est facile Í
faire dans la fonction str_to_int().)
Bonjour, je suis en train ce créer un programme afin de convertir des écritures en base 2, 10 et 16 entre elles. Pour ce faire, j'ai eu notamment besoin d'utiliser 2 chaÍ®nes. Je voudrais pouvoir les contrÍ´ler distinctement car a un endroit je fais break pour arrêter une boucle, et c'est l'autre qui s'arrête.
Une instruction break arrête la boucle la plus proche, c'est tout. (En Java on peu nommer les boucles et arrêter n'importe laquelle, mais pas en Python. En Python on peut écrire "for ... else ..." et "while ... else ...", avec la partie "else" exécutée seulement si la boucle qui précède n'a pas exécuté un "break" -- donc juste le contraire de ce que tu veux -- de toute façon, seuls les illuminés utilisent ce truc.)
voila mon programme avec l'endroit problematique entre #
Il n'y a pas de # dans ton code. Mais comme il n'y a que deux boucles... Ta structure est la suivante : while True: ... for s in nombre: ... Note que pour sortir du while, il faut déjÍ sortir du for, et aussi garder l'information qu'il faut aussi sortir du while. Tu vas donc arriver Í une structure du genre : interrompu = False while True: ... for s in nombre: ... if ... interrompu = True break ... if interrompu: break ... (Et donc, on peut sÍ»rement écrire mieux que "while True".) C'est assez compliqué Í relire. Le mieux est sÍ»rement de placer la boucle for dans une fonction qui renvoie un booléen qui indique si il faut continuer ou pas : while True: ... if not fonction_contenant_le for (...): break ... Mais voir plus bas pour une remarque sur la logique de ton code. Autre chose :
while True: base = int(input("base")) if base == 16 : nombre = str(input("nombre")) convert = int(input("convertion")) if convert == 2 : a = conversion_hexa_binaire(nombre) print(a) break elif convert == 10 : a = conversion_hexa_decimal(nombre) print(a) break
[...] Ce n'est pas très malin d'écrire des fonctions comme "conversion_hex_decimal", puisqu'il n'y a pas de rapport direct entre les deux écritures. Il vaut donc mieux passer par un entier (int), et écrire d'un part : - str_to_int (s, b) (transformer une écriture en base b en un int) - int_to_str (i, b) (transformer un int en son écriture en base b) puisque ces conversions sont très similaires pour les différentes bases. Ton programme deviendrait : while ...: base = int (input ("base")) ecriture = input ("écrture du nombre") convert = int (input ("convert")) valeur = str_to_int (ecriture, base) resultat = int_to_str (valeur, convert) ... Et effectivement, il y a des fonctions standard pour faire ça : - int (s, b) calcule str_to_int (s, b) - "{0:b}".format (i) calcule int_to_str (i, 2) (et on écrit "{0:d}" pour décimal, et "{0:x}" pour hexadécimal) (Note que les fonctions bin() et hex() font le même travail mais ajoutent un préfixe Í la chaÍ®ne résultante.) Enfin : [...]
elif base == 2 : nombre = int(input("nombre")) nombre = str(nombre) for s in nombre: if s not in "01": print("Erreur") continue
[...] Ton "continue" passe au "tour" suivant de la boucle for. Ce que signifie ce code c'est : "si un chiffre n'est pas correct, passer au chiffre suivant". Ça n'a pas l'air correct. (Et la partie "else" -- supprimée ici -- est encore moins compréhensible). (On ne voit pas bien non plus pourquoi on ne fait pas un test similaire des chiffres utilisés pour les autres bases. Au passage, c'est facile Í faire dans la fonction str_to_int().) -- Alain.