'x' не определен в пользовательской функции десятичного преобразования - PullRequest
0 голосов
/ 29 мая 2020
def deci_to_any_list():
    n1 = input("Enter a number: ")
    n = int(n1)
    radix1 = input("Enter a radix: ")
    radix = int(radix1)
    converted_number = []
    if n>0:
        if 2<=radix<=16:
            while int(n/radix) == 0:
                converted_number.append(n % radix)
                converted_number.reverse()
                x = ''.join(str(i) for i in converted_number)
                x.replace('10', 'A')
                x.replace('11', 'B')
                x.replace('12', 'C')
                x.replace('13', 'D')
                x.replace('14', 'E')
                x.replace('15', 'F')
                x.replace('16', 'G')
            else:
                converted_number.append(n % radix)
        else:
            print("Wrong input!!")
    else:
        print("Wrong input!!")

    print("%d in base 10 is %d in base %d" % (n1,x,radix1))

deci_to_any_list()
Enter a number : 10
Enter a radix : 2

Я хочу создать функцию десятичного преобразования. Я хочу создать эту функцию, используя функции добавления, реверса, соединения и замены. Если я введу указанный выше код, будет указано имя 'x' is not defined. Как мне с этим справиться?

1 Ответ

0 голосов
/ 29 мая 2020

В вашем коде много несоответствий.

  1. Вы печатаете x без его обновления.

  2. python строки являются неизменяемый, после замены apply вы должны перехватить копию другой переменной.

  3. ваш logi c для базового преобразования также неверен.

Исправленный код:

def replace_base(x):
    x = x.replace('10', 'A')
    x = x.replace('11', 'B')
    x = x.replace('12', 'C')
    x = x.replace('13', 'D')
    x = x.replace('14', 'E')
    x = x.replace('15', 'F')
    x = x.replace('16', 'G')
    return x

def deci_to_any_list():
    n1 = input("Enter a number: ")
    n = int(n1)
    radix1 = input("Enter a radix: ")
    radix = int(radix1)
    converted_number = []
    x = None # initialize
    if n>0:
        if 2<=radix<=16:
            while n>0:
                # conversion part
                converted_number.append(n % radix)
                n = n//radix

            # once the conversion is done
            converted_number.reverse()
            x = ''.join(replace_base(str(i)) for i in converted_number)

        else:
            print("Wrong input!!")
    else:
        print("Wrong input!!")
    print(converted_number)
    print(x)

deci_to_any_list()
...