Méthode int() qui marche pas en faisant un imput

Résolu/Fermé
jojol_8144 Messages postés 132 Date d'inscription vendredi 8 mars 2019 Statut Membre Dernière intervention 5 novembre 2020 - Modifié le 19 mai 2019 à 15:28
UltraBot Messages postés 67 Date d'inscription mercredi 17 avril 2019 Statut Membre Dernière intervention 15 juin 2019 - 22 mai 2019 à 19:05
Voilà mon soucis, lorsque j'exécute ce simple morceau de code:

tHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']

print("entrez un entier naturel")
unHexa  = (input("saisie de l'hexa à convertir "))
unHexa = ""
print(int(unHexa, 16))


j'obtiens ceci:


entrez un entier naturel
saisie de l'hexa à convertir 0xff
Traceback (most recent call last):
File "C:/Users/utilisateur/.PyCharmCE2018.3/config/scratches/TEST2.py", line 9, in <module>
print(int(unHexa, 16))
ValueError: invalid literal for int() with base 16: ''

Process finished with exit code 1


idem pour cette séquence de code:

class BaseConverter:
    def __init__(self, symboles):
        self.symboles = symboles
        self.sym2val = {l: i for i, l in enumerate(symboles)}
        self.val2sym = dict(enumerate(symboles))

    def to_base_10(self, string):
        i = 0
        base = len(self.sym2val)
        # On part de la gauche vers la droite,
        # donc on commence avec les valeurs les plus
        # grosses.
        # Pour chaque symbole, on ajoute la valeur
        # de celui-ci (donnée par la table) et
        # avec facteur lié à sa position.
        for c in string:
            i *= base
            i += self.sym2val[c]
        return i

    def from_base_10(self, number):
        """ Convert from a base 10 to the custom base"""
        array = []
        base = len(self.val2sym)
        # Division euclidienne en boucle jusqu'à ce que le
        # reste soit égal à zero.
        while number:
            number, value = divmod(number, base)
            # Le résultat est l'index du symbole.
            # On le place le plus à gauche, chaque
            # symbole ayant une valeur plus grande
            # que le précédent.
            array.insert(0, self.val2sym[value])

        # Ne pas oublier le zéro
        return "".join(array) or self.symboles[0]


base16_converter = BaseConverter("0123456789ABCDEF")
print(base16_converter.to_base_10("0xff"))  # 255


Et j’obtiens ceci:


Traceback (most recent call last):
File "C:/Users/Utilisateur/.PyCharmCE2018.3/config/scratches/machin.py", line 40, in <module>
print(base16_converter.to_base_10("0xff")) # 255
File "C:/Users/Utilisateur/.PyCharmCE2018.3/config/scratches/machin.py", line 18, in to_base_10
i += self.sym2val[c]
KeyError: 'x'

Process finished with exit code 1


Pourriez-vous m'aider à comprendre ce qui ne vas pas svp ?

Merci par avance

2 réponses

UltraBot Messages postés 67 Date d'inscription mercredi 17 avril 2019 Statut Membre Dernière intervention 15 juin 2019
19 mai 2019 à 16:33
Pour résoudre ce problème, essaie d'enlever unHexa = "" à la ligne 5
unHexa = ""
0
jojol_8144 Messages postés 132 Date d'inscription vendredi 8 mars 2019 Statut Membre Dernière intervention 5 novembre 2020 3
22 mai 2019 à 13:01
Slt,

Merci pour ta réponse, elle fonctionne pour mon premier script cependant,

Mon second programme de conversion ne marche pas quand j'essaye de convertir 0xff en 255:

<python>
class BaseConverter:
def __init__(self, symboles):
self.symboles = symboles
self.sym2val = {l: i for i, l in enumerate(symboles)}
self.val2sym = dict(enumerate(symboles))

def to_base_10(self, string):
i = 0
base = len(self.sym2val)
# On part de la gauche vers la droite,
# donc on commence avec les valeurs les plus
# grosses.
# Pour chaque symbole, on ajoute la valeur
# de celui-ci (donnée par la table) et
# avec facteur lié à sa position.
for c in string:
i *= base
i += self.sym2val[c]
return i

def from_base_10(self, number):
""" Convert from a base 10 to the custom base"""
array = []
base = len(self.val2sym)
# Division euclidienne en boucle jusqu'à ce que le
# reste soit égal à zero.
while number:
number, value = divmod(number, base)
# Le résultat est l'index du symbole.
# On le place le plus à gauche, chaque
# symbole ayant une valeur plus grande
# que le précédent.
array.insert(0, self.val2sym[value])

# Ne pas oublier le zéro
return "".join(array) or self.symboles[0]


base16_converter = BaseConverter("0123456789ABCDEF")
print(base16_converter.to_base_10("0xff")) # 255
</python>

Pourriez-vous m'aider à comprendre pk cela ne marche pas svp ?
0
UltraBot Messages postés 67 Date d'inscription mercredi 17 avril 2019 Statut Membre Dernière intervention 15 juin 2019
22 mai 2019 à 19:05
Désolé, je suis débutant
0
jojol_8144 Messages postés 132 Date d'inscription vendredi 8 mars 2019 Statut Membre Dernière intervention 5 novembre 2020 3
22 mai 2019 à 16:32
Up
0