Python преобразует десятичный код в шестнадцатеричный

У меня есть функция здесь, которая преобразует десятичный знак в шестнадцатеричный, но он печатает его в обратном порядке. Как я могу это исправить?

def ChangeHex(n): if (n < 0): print(0) elif (n<=1): print(n) else: x =(n%16) if (x < 10): print(x), if (x == 10): print("A"), if (x == 11): print("B"), if (x == 12): print("C"), if (x == 13): print("D"), if (x == 14): print("E"), if (x == 15): print ("F"), ChangeHex( n / 16 ) 

  • Как вернуть два значения из функции в Python?
  • Python: получение ссылки на функцию изнутри себя
  • Возврат кортежа с помощью одного элемента из функции
  • Должен ли я использовать «глобальный» или «я» для переменных класса класса в Python?
  • Как вернуть более одного значения из функции в Python?
  • Эквивалент для лямбда-функций Python в Java?
  • Python: что делает полуколона?
  • Функция обратного вызова tkinter с переменным параметром
  • Использование Lambda и кортежей для отправки нескольким функциям: Python, Tkinter
  • Вызов, если __name__ == '__main__': в одном модуле от функции в другом модуле
  • Python 3: UnboundLocalError: локальная переменная, на которую ссылаются перед присваиванием
  • Пошаговое объяснение этого кода
  • 13 Solutions collect form web for “Python преобразует десятичный код в шестнадцатеричный”

    Если вы хотите закодировать это самостоятельно, вместо использования встроенной функции hex() , вы можете просто сделать рекурсивный вызов, прежде чем печатать текущую цифру:

     def ChangeHex(n): if (n < 0): print(0) elif (n<=1): print n, else: ChangeHex( n / 16 ) x =(n%16) if (x < 10): print(x), if (x == 10): print("A"), if (x == 11): print("B"), if (x == 12): print("C"), if (x == 13): print("D"), if (x == 14): print("E"), if (x == 15): print ("F"), 

    Как насчет этого:

     hex(dec).split('x')[-1] 

    Пример:

     >>> d = 30 >>> hex(d).split('x')[-1] '1e' 

    ~ Rich

    Используя -1 в результате split (), это будет работать, даже если split возвращает список из 1 элемента.

    Это не совсем то, что вы просили, но вы можете использовать функцию «hex» в python:

     >>> hex(15) '0xf' 

    Я думаю, что это решение элегантно:

     def toHex(dec): x = (dec % 16) digits = "0123456789ABCDEF" rest = dec / 16 if (rest == 0): return digits[x] return toHex(rest) + digits[x] numbers = [0, 11, 16, 32, 33, 41, 45, 678, 574893] print [toHex(x) for x in numbers] print [hex(x) for x in numbers] 

    Этот выход:

     ['0', 'B', '10', '20', '21', '29', '2D', '2A6', '8C5AD'] ['0x0', '0xb', '0x10', '0x20', '0x21', '0x29', '0x2d', '0x2a6', '0x8c5ad'] 

    я использую

     "0x%X" % n 

    где n – десятичное число для преобразования.

    Если без префикса '0x' :

     '{0:x}'.format(int(dec)) 

    иначе используйте встроенный hex() funtion.

    Метод строкового формата Python может принимать спецификацию формата.

    От десятичной до двоичной

     "{0:b}".format(154) '10011010' 

    От десятичной до восьмеричной

     "{0:o}".format(154) '232' 

    От десятичного до шестнадцатеричного

     "{0:x}".format(154) '9a' 

    Форматировать спецификации документов для Python 2

    Формат спецификаций для Python 3

     def main(): result = int(input("Enter a whole, positive, number to be converted to hexadecimal: ")) hexadecimal = "" while result != 0: remainder = changeDigit(result % 16) hexadecimal = str(remainder) + hexadecimal result = int(result / 16) print(hexadecimal) def changeDigit(digit): decimal = [10 , 11 , 12 , 13 , 14 , 15 ] hexadecimal = ["A", "B", "C", "D", "E", "F"] for counter in range(7): if digit == decimal[counter - 1]: digit = hexadecimal[counter - 1] return digit main() 

    Это самое плотное, что я мог бы сделать для преобразования десятичного в шестнадцатеричный. ПРИМЕЧАНИЕ. Это в версии 3.5.1 Python

    Вместо того, чтобы печатать все в функции, вы можете просто позволить ей вернуть значение в шестнадцатеричном виде и делать с ним все, что хотите.

     def ChangeHex(n): x = (n % 16) c = "" if (x < 10): c = x if (x == 10): c = "A" if (x == 11): c = "B" if (x == 12): c = "C" if (x == 13): c = "D" if (x == 14): c = "E" if (x == 15): c = "F" if (n - x != 0): return ChangeHex(n / 16) + str(c) else: return str(c) print(ChangeHex(52)) 

    Есть, вероятно, более элегантные способы разбора алфавитных компонентов гексагона, а не просто использование условных выражений.

    Чтобы получить чистое шестнадцатеричное значение, это может быть полезно. Это основано на ответе Джо:

     def gethex(decimal): return hex(decimal)[2:] 

    Версия с итерацией:

     def toHex(decimal): hex_str = '' digits = "0123456789ABCDEF" if decimal == 0: return '0' while decimal != 0: hex_str += digits[decimal % 16] decimal = decimal // 16 return hex_str[::-1] # reverse the string numbers = [0, 16, 20, 45, 255, 456, 789, 1024] print([toHex(x) for x in numbers]) print([hex(x) for x in numbers]) 

    нерекурсивный подход для преобразования десятичного в шестнадцатеричный

     def to_hex(dec): hex_str = '' hex_digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F') rem = dec % 16 while dec >= rem: remainder = dec % 16 quotient = dec / 16 if quotient == 0: hex_str += hex_digits[remainder] else: hex_str += str(remainder) dec = quotient return hex_str[::-1] # reverse the string 

    Это работает довольно хорошо:

     def toHex(n): result, remainder = n, [] while result > 0: rem = result%16 result = result // 16 if rem < 10: remainder.append(str(rem)) else: if rem == 10: remainder.append('A') if rem == 11: remainder.append('B') if rem == 12: remainder.append('C') if rem == 13: remainder.append('D') if rem == 14: remainder.append('E') if rem == 15: remainder.append('F') return ''.join(remainder[::-1]) 
    Python - лучший язык программирования в мире.