Недавно я начал кодирование и столкнулся с чем-то, чего не понял полностью, пытаясь изучить Python на Codecademy.Ошибка Python в функции [Новичок]
Задача состояла в том, чтобы создать функцию, которая сообщила бы, если будет вызвано, было ли число простым числом или не было.
Так вот был мой первый раствор:
def is_prime(x):
if x < 2:
return False
elif x == 2:
return True
else:
for n in range(2, x-1):
if x % n == 0:
return False
else:
return True
print is_prime(5)
После его выполнения, он продолжал давать сообщение, что is_prime (3) было давать Ложные, вместо того чтобы дать Истинным. Таким образом, после поиска немного на форумах Codecademy я обнаружил, что если последний бит кода был alterd на:
def is_prime(x):
if x < 2:
return False
elif x == 2:
return True
else:
for n in range(2, x-1):
if x % n == 0:
return False
return True
print is_prime(5)
он начал работать нормально. Может ли кто-нибудь объяснить мне, как это изменение заставило код работать? Спасибо заранее.
Подумайте, когда ваша первая версия вернёт true. Проделайте это с помощью примера с бумагой и карандашом. Должно быть довольно очевидно то, что ошибка (хотя вы отнюдь не первый человек, чтобы сделать эту ошибку при расчете простых чисел, даже просто на вопросы Python SO сегодня, так что не беспокойтесь). – jonrsharpe
Я не вижу, как 'is_prime (3)' вернет либо «True», либо «False» для первой версии, так как «range (2, 3-1)» пуст, и поэтому код никогда не получает вернуть что-либо, кроме значения по умолчанию «Нет». – TigerhawkT3
@ TigerhawkT3 Я думаю, что грейдер видел «Нет» как false-y – jonrsharpe