【发布时间】:2016-04-25 06:10:07
【问题描述】:
我最近开始编码,在尝试在 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) 给出的消息是 False,而不是给出 True。 所以在Codecademy论坛上搜索了一下,发现如果最后一段代码改成:
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 问题,所以不用担心)。
-
我看不到
is_prime(3)将如何返回第一个版本的True或False,因为range(2, 3-1)是空的,因此代码永远没有机会返回任何其他内容比默认的None。 -
@TigerhawkT3 我猜评分员将
None视为假-y -
@jonrsharpe - 是的,这是我不喜欢那些自动评分机的原因之一。 =\