Разрешить программе python принимать входные данные с десятичным вводом

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

Редактировать: Эти инструкции были добавлены в качестве альтернативы. Как я могу реализовать это в коде?

  1. храните входные данные в массиве символов. примечание: символы перед десятичной точкой представляют собой целую часть, а после десятичной точки — дробную часть
  2. теперь вы можете умножить каждый элемент массива на соответствующие степени R,
  3. вычислите сумму произведений — сумма представляет собой преобразованное значение

Комментарии:

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