#python
#питон
Вопрос:
На самом деле я новичок в Python, и эта программа, над которой я работаю, не принимает десятичный ввод. Каждый раз, когда я меняю int на input или float, он не запускается. Также, если возможно, помогите мне сделать мой код более чистым.
def convert_number_system(input_number, input_base, output_base):
'''
returns: int, converted number
'''
remainder_list = []
sum_base_10 = 0
if output_base == 2:
binary_repr = bin(input_number)
return (binary_repr[2:])
elif input_base != 10:
reversed_input_number = input_number[::-1]
hex_helper_dict = {'a' : 10 , 'b' : 11 , 'c' : 12 , 'd' : 13 , 'e' : 14 , 'f' : 15}
for index, number in enumerate(reversed_input_number):
for key,value in hex_helper_dict.items():
if str(number).lower() == key:
number = value
sum_base_10 = (int(number)*(int(input_base)**index))
elif input_base == 10:
sum_base_10 = int(input_number)
while sum_base_10 > 0:
divided = sum_base_10// int(output_base)
remainder_list.append(str(sum_base_10 % int(output_base)))
sum_base_10 = divided
return_number = ''
if output_base == 16:
hex_dict = {10 : 'a' , 11 : 'b' , 12 : 'c' , 13 : 'd' , 14 : 'e' , 15 : 'f'}
for index, each in enumerate(remainder_list):
for key, value in hex_dict.items():
if each == str(key):
remainder_list[index] = value
else:
for each in remainder_list[::-1]:
return_number = each
return (return_number)
Редактировать: Эти инструкции были добавлены в качестве альтернативы. Как я могу реализовать это в коде?
- храните входные данные в массиве символов. примечание: символы перед десятичной точкой представляют собой целую часть, а после десятичной точки — дробную часть
- теперь вы можете умножить каждый элемент массива на соответствующие степени R,
- вычислите сумму произведений — сумма представляет собой преобразованное значение
Комментарии:
1. Вы можете преобразовывать только целые числа в двоичные, а не с плавающей запятой, как в
bin(input_number)
2. Привет и добро пожаловать в StackOverflow! Не могли бы вы объяснить, что вы подразумеваете под тем фактом, что код не выполняется. Вы получаете сообщение об ошибке?
3. Если это так, как моя программа будет принимать входные данные с плавающей запятой? кстати, это программа преобразования чисел.
4. да, если я изменю все int на float, ошибка будет: «не удалось преобразовать строку в float»
Ответ №1:
Чтобы изменить входную строку на десятичную, вы могли бы сделать float(input())
и проверить, является ли ввод на самом деле десятичным, вы могли бы сделать
if not (type(input_number) is float):
break;
Если это происходит в цикле while, который повторяется до тех пор, пока пользователь не введет допустимое значение с плавающей запятой, в противном случае программа просто завершится.
Комментарии:
1. могу ли я спросить, какие части конкретно я должен изменить в этом коде?
2. Ну, в вашем коде у него есть только функция, которая принимает переменную input_number, которая, как я предполагаю, является числом, которое вы вводите, поэтому в том месте, где объявлена эта переменная, поместите вокруг нее символ float() .