Я хочу сделать функцию десятичного преобразования - PullRequest
0 голосов
/ 30 мая 2020
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 = []
    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)
                replace_base(x)
            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: 61
Enter a radix: 16
Traceback (most recent call last):
  File "C:/Users/LG/기컴프과제2/Number conversion.py", line 33, in <module>
    deci_to_any_list()
  File "C:/Users/LG/기컴프과제2/Number conversion.py", line 31, in deci_to_any_list
    print("%d in base 10 is %d in base %d" % (n1,x,radix1))
UnboundLocalError: local variable 'x' referenced before assignment

Process finished with exit code 1

Я хочу создать функцию десятичного преобразования. Я разместил вопрос ранее, но вы просили меня предоставить вам более подробную информацию, поэтому я снова оставляю вопрос. Я не знаю, как исправить ошибку, и не знаю, как сделать эту функцию. Он может заставить делить частное на основание системы счисления до тех пор, пока частное не станет 0. И запишите остатки в обратном порядке. Я хочу сделать эту функцию, используя функцию добавления, реверса, соединения, оператора форматирования (%). В это время n должно быть положительным числом, а система счисления должна быть от 2 до 16. Последний результат: «61 по основанию 10 - это 3D по основанию 16».

1 Ответ

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

В вашем коде x определяется, только если 2 <= radix <= 16, но независимо от того, внизу вы вызываете print("%d in base 10 is %d in base %d" % (n1,x,radix1)), который пытается распечатать x, даже если он не был определен. Чтобы исправить это, либо переместите оператор печати в условие if 2 <= radix <= 16, либо определите x в своем операторе else.

Также будьте осторожны с отступом и обратите внимание, что replace_base(x) не измените значение x, если вы не сделаете x = replace_base(x).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...