Ваш код сбивает с толку и переплетает две части.Предположительно, вы хотите
- Запросить у пользователя два числа
- Рекурсивно оценить наибольший общий делитель из них
Но функция gcd
ожидает обоихдва числа в качестве параметров, а также просит пользователя ввести числа (тем самым игнорируя параметры), а также рекурсивно вызывает себя.
Ошибка имени происходит из последней строки, gcd(a, b)
, где вы пытаетесь получить GCD a
и b
- но a
и b
еще не были введены (так как вы делаете это только внутри функции).
Даже если этот бит сработает, ваша функция рассчитывает, что для вычисления GCD из двух больших чисел потребуется вычислить GCDиз двух меньших чисел заранее.Пока все хорошо - за исключением того, что вы никогда не вычисляете GCD меньших чисел, а вместо этого запрашиваете у пользователя новую, не связанную пару чисел для вычисления GCD, и забываете о расчете предыдущей пары.
Такжеобратите внимание, что ваше условное выражение if b == 0
имеет return
в обеих ветвях, поэтому код под ним в функции gcd
никогда не будет достигнут.
Поэтому, чтобы сделать то, что вы хотите, попробуйте изменить код напоместите этот псевдокод:
function gcd(a, b)
calculate GCD without asking user anything
presume user wants to continue
loop while user wants to continue
ask for two numbers
calculate GCD
print result
ask the user if they want to continue
Кроме того, у вас есть несколько странных строк.Это на самом деле не ошибка , если только я не пропустил что-то, чтобы строка "true"
указывала на истинное значение, или строка "null"
для значения не было, но это очень, очень плохая форма - есть специальныезначения True
и None
в Python для этих ролей (вы даже правильно использовали True
в while True
).