Ошибка ValueError: invalid literal for int() with base 10: ''
Начал изучать Python, скачал курсы с Фоксфорда и там такое задание: Напишите программу, которая переводит число (возможно, отрицательное), записанное в шестнадцатеричной системе, в десятичную систему. Входные данные Входная строка содержит шестнадцатеричную запись числа N (1 ≤ |N| < 109).
При переводе чисел всё работает нормально но когда используются буквы вылазит ошибка из заголовка
Вот сам код:
number = input('') # строка которую необходимо перевести из шестнадцатеричной в десятичную
A = '10'
B = '11'
C = '12'
D = '13'
E = '14'
F = '15'
if len(number) == 1:
print(int(number)) # Здесь и в нижних строках не переводит в строку в int
elif len(number) == 2:
print(int(number) * 16 + int(number))
elif len(number) == 3:
print(int(number) * 256 + int(number) * 16 + int(number))
elif len(number) == 4:
print(int(number) * 4096 + int(number) * 16 + int(number))
Возможно я неправильно перевожу строку в число
number = input('')
A = '10'
B = '11'
C = '12'
D = '13'
E = '14'
F = '15'
if len(number) == 1:
print(int(number, 16))
elif len(number) == 2:
print(int(number, 16) * 16 + int(number, 16))
elif len(number) == 3:
print(int(number, 16) * 256 + int(number, 16) * 16 + int(number, 16))
elif len(number) == 4:
print(int(number, 16) * 4096 + int(number, 16) * 16 + int(number, 16))
Такое тоже не работает
number = input('')
A = '10'
B = '11'
C = '12'
D = '13'
E = '14'
F = '15'
if len(number) == 1:
print(int(number[0]))
elif len(number) == 2:
print(int(number[0]) * 16 + int(number[1]))
elif len(number) == 3:
print(int(number[0]) * 256 + int(number[1]) * 16 + int(number[2]))
elif len(number) == 4:
print(int(number[0]) * 4096 + int(number[1]) * 256 + int(number[2]) * 16 + int(number[3]))
в итоге ошибка:
Traceback (most recent call last):
File "E:/1/pythonProject1/1.py", line 9, in <module>
print(int(number[0]))
ValueError: invalid literal for int() with base 10: 'A'
Вместо A пишет любой текст который я вводится в консоль
Ответы (2 шт):
При преобразовании строковой записи шестнадцатеричных чисел в int необходимо указывать систему счисления вторым аргументом. То есть у Вас в каждом случае должно быть:
int(number, 16)
И ещё, насчёт задачи: input() уже переводит строку в число в десятичной системе. Вам нет необходимости производить другие манипуляции. То есть, по сути, если Ваша программа просто должна выводить введённое число в десятичной системе, она ВСЯ будет состоять из одной строки:
print(int(input(), 16))
Вы можете либо воспользоваться встроенными возможностями питона и переводить числа одной строчкой:
print(int(input(), 16))
Либо, если вы хотите именно вручную переводить числа посимвольно (в учебных целях), можно использовать примерно такую функцию для одиночных 16-ричных символов:
def hex_num_value(hex_num):
hex_num = hex_num.upper()
if hex_num < 'A':
return int(hex_num)
return 10 + ord(hex_num) - ord('A')
В ней для чисел от A до F (и от a до f тоже) вычисляется вручную 10-чное число, используя код символа, полученный функцией ord.
Кроме того, вы должны брать из числа отдельные символы, т.е. ваш код:
elif len(number) == 2:
print(int(number, 16) * 16 + int(number, 16))
Должен выглядеть так с использованием моей функции (один из if-ов для примера):
elif len(number) == 2:
print(hex_num_value(number[0]) * 16 + hex_num_value(number[1]))
Вы везде берёте полностью number, а нужно брать n-ный символ number[n], переводить его в 10-чное число и потом домножать.