1
votes

Fonction Python pour convertir un chiffre binaire en hexadécimal

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()

Voici ce qui s'affiche lorsque je lance


3 commentaires

Utilisez upper au lieu de capitalize .


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


3 Réponses :


0
votes

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


2 commentaires

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é



1
votes

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: ')


4 commentaires

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



0
votes

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}')


4 commentaires

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' ...