Я пытаюсь написать функцию на 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 (длина начального числа) и напечатает окончательный результат.
Я не знаю, где моя формула испортилась. Я не вижу никаких логических ошибок в этом, которые привели бы к этому. Я возился с этим часами и не могу заставить его делать что-то другое. Ну, сначала это выбрасывало числа, которые я понятия не имел, где это получало их. После возни, теперь он просто выбрасывает одно и то же число снова и снова. Я не могу понять, откуда взялись эти числа.