Bonjour, pourriez-vous m'aider svp, j'arrive pas à effectuer ma conversion:
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'Hexadécimal à convert1ir "))
k = 0
unEntier = 0
while len(unHexa) > 0:
s = chr(unHexa, sys.getsizeof(unHexa)-1,1)
position = 0
while s not in tHexa[position]:
position = position +1
unEntier = unEntier + position * 16**k
unHexa = chr(unHexa, 0,sys.getsizeof(unHexa)-1)
k = k + 1
print (unEntier)
voilà l'erreur créée en console:
C:\Users\Utilisateur\PycharmProjects\conversion\venv\Scripts\python.exe C:/Users/Utilisateur/.PyCharmCE2018.3/config/scratches/TEST2.py
entrez un entier naturel
saisie de l'Hexadécimal à convert1ir 0xff
Traceback (most recent call last):
File "C:/Users/Utilisateur/.PyCharmCE2018.3/config/scratches/TEST2.py", line 7, in <module>
s = chr(unHexa, sys.getsizeof(unHexa)-1,1)
NameError: name 'sys' is not defined
Process finished with exit code 1
Le message d'erreur est explicite, tu as juste oublié d'importer le module sys.
Mais je ne sais pas ce que tu veux faire avec la fonction getsizeof, d'autant plus que la fonction chr ne prend qu'un argument et pas 3, donc même en corrigant l'import du module sys, ça va planter à la même ligne sur l'appel à chr().
La condition du while ligne 9 ne colle pas non plus, après le mot clé in, il doit y avoir une liste, or là tu prend un élément de la liste et pas la liste entière. Tu peux juste utiliser != à la place de not in je pense.
Difficile d'en dire plus, parce qu'en fait j'arrive pas du tout à comprendre ce que tu voulais faire en lisant ton code !
afficher "Entrez un hexadécimal = "
saisir unHexa
// conversion par addition des digits multipliés par les poids
k ← 0 // pour les puissances
unEntier ← 0
tantque taille(unHexa) > 0
// extraction du dernier caractère hexa
s ← extraire(unHexa, unHexa.size()-1, 1)
// recherche de la position du caractère dans le vecteur
position ← 0
tantque s <> tHexa[position]
position ← position + 1
fintantque
// ajout du digit récupéré multiplié par la puissance de 16
unEntier ← unEntier + position * 16k
// on enlève le dernier caractère
unHexa ← extraire(unHexa, 0, unHexa.size()-1)
k ← k + 1
fintantque
// affichage du résultat
afficher "valeur décimale = ", unEntier
La ligne concerné:
// extraction du dernier caractère hexa
s ← extraire(unHexa, unHexa.size()-1, 1)
Je ne suis pas sur mon PC mais j'aimerais savoir si avec ce programme, si je tape 0xff, j'aurais bien 255 qui me sera affiché ou si je dois modifier qq chose ?
HEX="0123456789ABCDEF"
n="1C8025AB"
v=0
for c in n:
v *= 16
v += HEX.find(c)
print(v)
Mais il y a encore plus simple :
print(sum("0123456789ABCDEF".find(c)*16**k for (k,c) in enumerate("1C8025AB"[::-1])))
mais la question était d'implémenter au près près l'algorithme demandé et écrit en pseudo code plus haut. Si j'ai écrit n[-1] c'est que l'auteur de la question faisait allusion à l'" extraction du dernier caractère hexa" et si j'ai écrit n[:-1] c'est que le pseudo code disait "on enlève le dernier caractère" et donc ce qui reste est le slice.
En réalité la méthode de celui qui a posé est assez laborieuse et revient a écrire l'écriture en base 16 comme j'ai fait ci-dessus.
N'hésite pas à ajouter des print dans le code pour inspecter le contenu des variables, c'est une méthode de debug basique, mais ça peut aussi être utile pour comprendre ce que fait un bout de code.
Ici la boucle itère sur les caractères de la chaîne n.
Pour chaque caractère, on multiplie v par 16, puis on lui ajoute l'indice auquel est placé le caractère c dans la chaîne HEX. Sachant que la chaîne HEX est formée pour que chaque caractère soit positionné à l'indice qui correspond à sa valeur en base 10 (0 est à l'indice 0, A est à l'indice 10, F à l'indice 15).
J'aurais besoin de savoir ce que cela fais en pseudocode svp ?
HEX="0123456789ABCDEF"
n="1C8025AB"
v=0
for c in n:
v *= 16
v += HEX.find(c)
print(v)
Car je suis pas sur d'avoir compris cette méthode
- Edité par Doudoudu35 BIS il y a environ 1 heure
Ce n'est pas si évident. C'est exactement le schéma de Horner. Son intérêt essentiel est d'éviter de recalculer à chaque fois la puissance de 16 courante.
Oui, je m'en suis rendu compte juste avant que tu poste ta réponse
Merci
- Edité par Doudoudu35 23 mai 2019 à 23:07:11
Base 16 vers base 10
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Blond, bouclé, toujours le sourire aux lèvres...
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères