Не работает функция(формула) перевода из одной сс в другую

#Ввод чисел
number1 = input('Введите число: ')
number2 = input('Введите число: ')
#Преоброзование их в строчку 
number1 = [int(i) for i in number1]
number2 = [int(j) for j in number2]
#длинна 
num1 = len(number1)
num2 = len(number2)
#перевод из мнимой восмеричной системы в 10тичную 
for i in range(0, num1):
    number1Dec=(number1[i])*(8**(num1-i-1))
#перевод из мнимой пятиричной системы в 10тичную 
for j in range(0, num2):
    number2Dec=(number2[j])*(5**(num2-j-1))
#вычетание 
MainNumber=number1Dec-number2Dec
#перевод в восьмеричку
octe=MainNumber
x = octe
n = ""
 
while x > 0:
 y = str(x % 8)
 n = y + n
 x = int(x / 8)
 
print (n)

Ответы (1 шт):

Автор решения: Zhihar

Честер вы всё еще эту задачу мучаете?

ошибка 1:

Ваш код показывает что не стоит использовать копипасту своего же кода - лезут одни ошибки

number1 = [int(i) for i in number1]
number2 = [int(j) for j in number1] # скопировали, а переименовать number1 в number2 забыли

ошибка 2:

Что вы вычисляете этим кодом?

for i in range(0, num1):
    number1Dec=(number1[i])*(8**(num1-i-1))

последнюю (старшую) цифру числа?

вы не получаете само число, поскольку не накапливаете результат

избыточность:

Зачем усложнять код?

for i in range(0, num1):

можно сократить до

for i in range(num1):

Решение:

Держите, я немного причесал код и сократил :)

# Ввод и зеркальное отображение чисел
number1 = input('Введите число: ')[::-1]
number2 = input('Введите число: ')[::-1]

# перевод из восмеричной системы в 10тичную
number1Dec = 0
for i in range(len(number1)):
    number1Dec += int(number1[i]) * (8 ** i)

# перевод из пятиричной системы в 10тичную
number2Dec = 0
for i in range(len(number2)):
    number2Dec += int(number2[i]) * (5 ** i)

# вычитание
numberSub = number1Dec - number2Dec

# перевод из десятеричной в восьмеричную
numberSubOct = ''

while numberSub > 0:
    numberSubOct = str(numberSub % 8) + numberSubOct
    numberSub //= 8

print(numberSubOct)

у кода 2 проблемы, которые я не стал править, вы можете это сделать самостоятельно:

  1. работа с отрицательным и нулевым numberSub - надо сделать корректный вывод

  2. коррекция ввода чисел начинающихся с нулей - например 000010 - программа должна понять, что это все равно 8 :)

P.S.

можно чуть причесать код перевода в десятеричную систему и сделать таким:

number1Dec = 0
for index, digit in enumerate(number1):
    number1Dec += int(digit) * (8 ** index)
→ Ссылка