Не работает функция(формула) перевода из одной сс в другую
#Ввод чисел
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 шт):
Честер вы всё еще эту задачу мучаете?
ошибка 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 проблемы, которые я не стал править, вы можете это сделать самостоятельно:
работа с отрицательным и нулевым
numberSub- надо сделать корректный выводкоррекция ввода чисел начинающихся с нулей - например
000010- программа должна понять, что это все равно 8 :)
P.S.
можно чуть причесать код перевода в десятеричную систему и сделать таким:
number1Dec = 0
for index, digit in enumerate(number1):
number1Dec += int(digit) * (8 ** index)