Мой код Python для преобразования числа в основание 10 всегда выдает 1665 независимо от того, что я ввожу - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь написать функцию на Python, которая будет конвертировать числа в разные базы. Я создал цикл while, который должен превратить любое число в число 10. Мой план состоит в том, чтобы преобразовать первое число в базу 10, а затем преобразовать ее в целевую базу. Я делаю это таким образом, потому что вся арифметика должна быть сделана в базе 10.

Я составил схему и вставил код, но он всегда дает один и тот же результат, и я не знаю, почему.

Вот мой код:

def fconbase(cnum, cbase1, cbase2):
    #resets variables used in calculations
    exp=0
    result=0
    decimalResult=0
    currentDigit="blank"
    cnumlen=len(str(cnum)) #finds length of cnum, stays constant
    digitNum=cnumlen #sets starting placement
    while exp<cnumlen:
        currentDigit=str(cnum)[digitNum-1:digitNum]
        #the following converts letters into their corresponding integers
        if currentDigit=="a" or "A":
            currentDigit="10"
        if currentDigit=="b" or "B":
            currentDigit="11"
        if currentDigit=="c" or "C":
            currentDigit="12"
        if currentDigit=="d" or "D":
            currentDigit="13"
        if currentDigit=="e" or "E":
            currentdigit="14"
        if currentDigit=="f" or "F":
            currentDigit="15"
        result=int(currentDigit)
        decimalResult=decimalResult+result*(10**exp)
        exp=exp+1
        digitNum=digitNum-1
    print(decimalResult)

Вот как это должно работать:

Во-первых, он находит, сколько цифр в исходном номере. Это используется, чтобы определить, сколько раз цикл должен продолжаться.

Затем он использует это, чтобы выловить последнюю цифру. Затем он преобразует любые буквы в соответствующие им цифры (это для случаев, когда число находится в базе 11 или выше). Получается целое число и умножается на 10 ^ exp. Опыт начинается с 0, поэтому 10 ^ опыт должен выйти на 1.

Затем он добавляет результат в decimalResult (результат в базе 10). Затем он увеличивает exp (onent) на 1, так что 10 ** exp теперь получится равным 10 и вычитает одно из 'currentDigit', чтобы вывести вторую или последнюю цифру.

Затем он зацикливается и продолжает этот паттерн до тех пор, пока exp не станет равным cnumlen (длина начального числа) и напечатает окончательный результат.

Я не знаю, где моя формула испортилась. Я не вижу никаких логических ошибок в этом, которые привели бы к этому. Я возился с этим часами и не могу заставить его делать что-то другое. Ну, сначала это выбрасывало числа, которые я понятия не имел, где это получало их. После возни, теперь он просто выбрасывает одно и то же число снова и снова. Я не могу понять, откуда взялись эти числа.

...