J'ai un autre problème avec un programme qui convertit les chiffres binaires en hexadécimal. J'ai le programme qui fonctionne bien mais affiche le chiffre hexadécimal en petites majuscules bien que la réponse soit requise en majuscules comme indiqué dans le question et exemple d'exécution
Voici mon code
def binaryToHex(binaryValue): #convert binaryValue to decimal decvalue = 0 for i in range(len(binaryValue)): digit = binaryValue.pop() if digit == '1': decvalue = decvalue + pow(2, i) #convert decimal to hexadecimal hexadecimal=hex(decvalue) return hexadecimal def main(): binaryValue = list(input("Input a binary number: ")) hexval=binaryToHex(binaryValue) hexa=h1.capitalize() #Tried to use capitalize() function but didn't worl print("The hex value is",hexa[ 2:4]) #strips off the first 2 digits main()
3 Réponses :
Une erreur que vous avez faite est que h1 n'existe pas dans le code et pourtant il est présent.
.upper () sur une chaîne la change en majuscules
Input a binary number: 10001111 The hex value is 8F
sortie:
def main(): binaryValue = list(input("Input a binary number: ")) hexval=binaryToHex(binaryValue) hexa=hexval.upper() print("The hex value is",hexa[ 2:4]) #strips off the first 2 digits
Merci, cela a fonctionné sur ma machine locale bien que le programme utilisé pour le marquage indique une erreur selon laquelle la sortie standard n'est pas celle attendue
Pourriez-vous publier le message d'erreur. Je n'arrive pas à comprendre le problème auquel vous êtes confronté
Comme cela revient un peu - voici une réponse qui est assez pythonique et qui, espérons-le, servira de référence canonique pour les questions futures.
Tout d'abord, gardez simplement l'entrée sous forme de chaîne:
def binaryToHex(binaryValue): number = int(binaryValue, 2) return format(number, 'X') def main(): binaryValue = input('Enter a binary number: ') print('The hex value is', binaryToHex(binaryValue)) main()
Ensuite, utilisez le int
intégré avec un argument base
de 2 (qui indique d'interpréter la chaîne comme des chiffres binaires) pour obtenir un entier de votre chaîne :
print(f'The hex value is {number:X}')
Ensuite, vous pouvez utiliser une f-string
pour imprimer votre numéro avec un spécificateur de format X
qui signifie dans "hex avec des lettres majuscules et pas de préfixe":
number = int(binary_value, 2) # 10001111 -> 143
Votre base de code entière serait alors quelque chose comme (en respectant les deux fonctions et vos conventions de dénomination): p >
binary_value = input('Enter a binary number: ')
J'ai changé mon code en def binaryToHex (binaryValue): decvalue = int (binaryValue, 2) hexadecimal = hex (decvalue) return hexadecimal def main (): binaryValue = input ("Entrez un nombre binaire:") hexval = binaryToHex (binaryValue) ) hexa = hexval.upper () print (f'La valeur hexadécimale est {hexval: X} ') main ()
J'obtiens une erreur indiquant le code de format inconnu 'X' pour l'objet de type 'str'
@PatienceMuthoki Oui ... parce que vous ne voulez pas faire d'autres conversations de chaîne, vous voulez littéralement imprimer le int
que vous obtenez avec le spécificateur de format X et il fait tout cela pour vous. Vous n'avez littéralement besoin que des 3 lignes ci-dessus ... vous n'avez rien d'autre à faire avec hex
ou quoi que ce soit d'autre.
Donc 1) obtenir l'entrée, 2) le convertir en entier, 3) imprimer ce nombre avec le spécificateur de format
juste faire une fonction ...
def binaryToHex(): binval = input('Input a binary number : ') num = int(binval, base=2) hexa = hex(num).upper().lstrip('0X') print(f'The hex value is {hexa}')
Avez-vous essayé cela avec une entrée de 00000000
- .lstrip
ne fait pas ce que vous pensez qu'il fait ici ...
Bien sûr, j'ai essayé ce que @Wira Bhakti a fait et n'affiche pas la bonne chose. De plus, nous devons utiliser 2 fonctions
@JonClements pouvez-vous expliquer pourquoi 'X0X'.lsplit (' X0 ') est interprété comme un "" (chaîne vide) ...?
@Wira .lstrip
supprime tous les caractères (pas la chaîne entière elle-même) dans la chaîne donnée depuis le début de la chaîne jusqu'à ce qu'elle rencontre un caractère qui ne figure pas dans les caractères donnés. ... donc ... 'ABCABCABC'.lstrip (' BCA ')
vous donnera une chaîne vide, mais ' ABCABCDABC'.lstrip ('BCA')
vous donnez 'DABC'
...
Utilisez
upper
au lieu decapitalize
.umm
hexa [2: 4]
ne supprime pas simplement les deux premiers chiffres ... ce serait[2:]
. .. aussi, je suppose que c'est un exercice quelconque et que vous n'êtes pas autorisé à utiliser simplement:format (int (binaryValue, 2), 'X')
?@JonClements Je ne pense pas qu'il y ait de restriction à cela. Je peux l'utiliser