Кроме того, похоже, что ваше базовое преобразование на самом деле не будет делать то, что вы хотите.Вы должны взглянуть на Как преобразовать целое число в любом основании в строку? , чтобы правильно выполнить преобразование (в шестнадцатеричном виде есть буквы AF, например, они не обрабатываются вашим кодом).
Чтобы принять имя вместо числа, вам нужно изменить эту строку кода:
base = int(input("Convert to\n Binary[2] - Octal[8] - Hexadecimal[16]: "))
Что здесь происходит?input()
берет строку из стандартного ввода.В интерактивном случае это означает, что пользователь что-то набирает (возможно, число), а затем нажимает клавишу ввода.Мы получили эту строку.Затем int
преобразует эту строку в число.
Ваш convert
ожидает, что base
будет числом.Вы хотите, чтобы вводы типа "binary"
соответствовали base = 2
.Один из способов добиться этого - с помощью диктанта.Он может отображать строки в числа:
base_name_to_base = {'binary': 2, 'octal': 8, 'hexadecimal': 16}
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
Обратите внимание, что base_name_to_base[x]
может потерпеть неудачу (raise KeyError
), если x
не является ключом в dict.Таким образом, вы хотите обработать это (что, если пользователь вводит "blah"
?):
while True:
try:
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
break
except KeyError:
pass
Это будет цикл до тех пор, пока мы не достигнем перерыва (что происходит только тогда, когда индексирование в base_name_to_base
не поднимаетключевая ошибка.
Кроме того, вы можете обрабатывать разные случаи (например, "BINARY"
) или произвольные пробелы (например, " binary "
). Это можно сделать, вызвав .lower()
и .strip()
настрока, возвращаемая input()
.