num1 = input("First natural number: ")
if num1.isdigit():
int(num1)
break
while True:
num2 = input("Second natural number: ")
if num2.isdigit():
int(num2)
break
if num1 > num2:
max = num1
min = num2
elif num1 < num2:
max = num2
min = num1
else:
print("%d & %d highest common division: %d",num1,num2,num1)
def tgcd(max,min):
if max% min != 0:
tgcd(max, min-1)
else:
print("%d & %d highest common division: %d",max,min,min)
tgcd(max,min)
при реализации этого кода возникает ошибка типа лица: не все аргументы преобразуются во время форматирования строки... но я не использую строку ;;;
В этом коде много чего не так. Я предлагаю пройти обучение от начала до конца и поговорить с инструктором или репетитором.
int()
не меняется на месте. Изменение вашего кода на:
while True:
num1 = input("First natural number: ")
if num1.isdigit():
num1 = int(num1) # CHANGED
break
while True:
num2 = input("Second natural number: ")
if num2.isdigit():
num2 = int(num2) # CHANGED
break
if num1 > num2:
max = num1
min = num2
elif num1 < num2:
max = num2
min = num1
else:
print("%d & %d highest common division: %d",num1,num2,num1)
def tgcd(max,min):
if max% min != 0:
tgcd(max, min-1)
else:
print("%d & %d highest common division: %d",max,min,min)
tgcd(max,min)
решает эту проблему - в коде есть другие проблемы, но это исправление устраняет это.
Форматирование строки не будет иметь значения, если значение на самом деле является целым числом. Редактировать: а, я вижу: проблема в max % min
, а не в любом из print
с кодами %
в них.
Ваша проблема связана с неправильным использованием форматирования в ваших утверждениях print
.
то есть
print("%d & %d highest common division: %d",num1,num2,num1)
Должно быть действительно:
print("%d & %d highest common division: %d" % (num1,num2,num1))
То же самое с другим утверждением. Таким образом, это должно быть, наконец:
while True:
num1 = input("First natural number: ")
if num1.isdigit():
num1 = int(num1) # CHANGED
break
while True:
num2 = input("Second natural number: ")
if num2.isdigit():
num2 = int(num2) # CHANGED
break
if num1 > num2:
max = num1
min = num2
elif num1 < num2:
max = num2
min = num1
else:
print("%d & %d highest common division: %d" % (num1,num2,num1))
def tgcd(max,min):
if max% min != 0:
tgcd(max, min-1)
else:
print("%d & %d highest common division: %d" % (max,min,min))
tgcd(max,min)
Хотя это правильно, я думаю, что использовать f-строки будет проще.
«Ваша проблема связана с неправильным использованием форматирования в ваших операторах печати». Это исправляет вывод, но не имеет ничего общего с сообщенной ошибкой. Это было исправлено изменениями num1 = int(num1)
и т. д.
@КарлКнехтель Верно. Проблема, которую я видел, заключалась в том, что это была проблема с выходом. Проблема с типом была еще одним пунктом... должен исправить код. Спасибо
Где код говорит:
if max% min != 0:
На данный момент max
это строка, потому что num1
и num2
обе строки, потому что, например. int(num1)
*не изменилсяnum1
. Вы не можете преобразовать строку в целое число «на месте» в Python. int()
Целое число создает новый. Если вы хотите использовать его, назначьте его обратно переменной: num1 = int(num1)
.
Поскольку max
была строкой, max % min
означает использование форматирования строки в стиле %. Это не сработало, потому что в строке max
нет %-кода, который нужно заменить.
С другой стороны:
print("%d & %d highest common division: %d",num1,num2,num1)
Этот не использует форматирование строки в стиле %, даже если в первой строке есть %-коды. Это потому, что оператор %
не используется. Вместо этого num1, num2, num1
— это просто дополнительные аргументы для функции print
. Мы можем исправить это так: print("%d & %d highest common division: %d" % (num1, num2, num1))
.
Однако проще использовать современный подход к форматированию строк. Выглядит это так: print(f"{num1} & {num2} highest common division: {num1}")
. Обратите внимание на f
перед "
— это необходимо. Перед запуском кода Python преобразует его в print("{} & {} highest common division: {}".format(num1, num2, num1))
, используя новый метод .format
для строк. Можно и так написать. Этот метод форматирования является более мощным и элегантным, чем старый способ %. Подробнее об этом можно прочитать здесь и здесь.
"но я не использую строку" я не понимаю. Как вы думаете, что означает
string
? Как вы думаете, что это, например, за"%d & %d highest common division: %d"
?