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

Résolu
jojol_8144 Messages postés 142 Statut Membre -  
UltraBot Messages postés 72 Statut Membre -
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

  1. UltraBot Messages postés 72 Statut Membre
     
    Pour résoudre ce problème, essaie d'enlever unHexa = "" à la ligne 5
    unHexa = ""
    0
    1. jojol_8144 Messages postés 142 Statut Membre 3
       
      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
    2. UltraBot Messages postés 72 Statut Membre
       
      Désolé, je suis débutant
      0
  2. jojol_8144 Messages postés 142 Statut Membre 3
     
    Up
    0