Python 素数函数在教程中返回错误
Python prime number function returning error in tutorial
Python新手,多多包涵...
遗憾的是,这些教程没有 "support",只能在问答论坛中发布问题,也许其他学生可以提供帮助。我知道那里有大量 Python 素数函数,但我想我已经想出了一个可行的函数。但是,Codeacademy 解释器不喜欢我的解决方案。
这是挑战:
- Define a function called is_prime that takes a number x as input.
- For each number n from 2 to x - 1, test if x is evenly divisible by n.
- If it is, return False.
- If none of them are, then return True.
这是我的解决方案(是的,我知道这确实不 Pythonic 并且超级不优雅,但我正在学习):
def is_prime(x):
x = int(x)
if x > 0:
return False
if x == 0:
return False
if x == 1:
print "1 is not a prime number"
return False
if x == 2:
print "2 is a prime"
return True
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
print is_prime(-10)
当我在 Codeacademy 解释器中 运行 以上内容时,它返回此错误:
Oops, try again. Your function fails on is_prime(-10). It returns True when it should return False.
不确定如何编写条件来过滤掉负整数,我尝试将 x 转换为整数并添加一个 if x > 0: return False
但这似乎不起作用。
我在这里做错了什么?
您不会return任何大于 2 的值的结果。
对于 0、1 和 2,你 return 它:
return True
对于涵盖所有其他数字的第四种情况,您只打印结果,但不return它作为布尔值。
编辑: 您尝试过滤负值失败,因为您 return False
当输入为正而不是负时:
if x > 0: return False
你应该改用这个:
if x < 0: return False
首先,
if x > 0:
需要
if x < 0:
代数说 > 表示大于,< 表示小于。因为负数小于 0,所以你 return 只有当 x < 0 时才为假。
然后,
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
有很多缩进不准确之处。问题是,您的 else: 语句与 if x == 2: 结合使用,而不是 for 循环中的 if 语句。然而,我,无所不知,理解你的目的,并在这里拯救这一天(为此感到抱歉)。将底部的所有内容更改为
for i in range(2, x):
#print i
if x % i == 0:
print "This is not a prime number"
return False
#You don't need a break statement because you are returning a value. This means that the function stops because it has completed its job, which is to give back something
print "this is a prime number"
return True
#If all that for looping was to no avail and the number is a prime number, we already know that by this point. We can just return True.
为了迎合 none 正数和零使用 x <= 0
def is_prime(x):
x = int(x)
if x <= 0:
return False
if x == 1:
print "1 is not a prime number"
return False
if x == 2:
print "2 is a prime"
return True
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
def is_prime(x):
if x < 2:
return False
for n in range(2,x-1):
if x % n == 0:
return False
else:
return True
def is_prime(x):
# All numbers < 2 are not prime
if x < 2:
return False
for i in range(2, x):
if x % i == 0:
return False
return True
print "is_prime({}): {}".format(-7, is_prime(-7))
print "is_prime({}): {}".format(-10, is_prime(-10))
print "is_prime({}): {}".format(11, is_prime(11))
print "is_prime({}): {}".format(18, is_prime(18))
Python新手,多多包涵...
遗憾的是,这些教程没有 "support",只能在问答论坛中发布问题,也许其他学生可以提供帮助。我知道那里有大量 Python 素数函数,但我想我已经想出了一个可行的函数。但是,Codeacademy 解释器不喜欢我的解决方案。
这是挑战:
- Define a function called is_prime that takes a number x as input.
- For each number n from 2 to x - 1, test if x is evenly divisible by n.
- If it is, return False.
- If none of them are, then return True.
这是我的解决方案(是的,我知道这确实不 Pythonic 并且超级不优雅,但我正在学习):
def is_prime(x):
x = int(x)
if x > 0:
return False
if x == 0:
return False
if x == 1:
print "1 is not a prime number"
return False
if x == 2:
print "2 is a prime"
return True
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
print is_prime(-10)
当我在 Codeacademy 解释器中 运行 以上内容时,它返回此错误:
Oops, try again. Your function fails on is_prime(-10). It returns True when it should return False.
不确定如何编写条件来过滤掉负整数,我尝试将 x 转换为整数并添加一个 if x > 0: return False
但这似乎不起作用。
我在这里做错了什么?
您不会return任何大于 2 的值的结果。
对于 0、1 和 2,你 return 它:
return True
对于涵盖所有其他数字的第四种情况,您只打印结果,但不return它作为布尔值。
编辑: 您尝试过滤负值失败,因为您 return False
当输入为正而不是负时:
if x > 0: return False
你应该改用这个:
if x < 0: return False
首先,
if x > 0:
需要
if x < 0:
代数说 > 表示大于,< 表示小于。因为负数小于 0,所以你 return 只有当 x < 0 时才为假。
然后,
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
有很多缩进不准确之处。问题是,您的 else: 语句与 if x == 2: 结合使用,而不是 for 循环中的 if 语句。然而,我,无所不知,理解你的目的,并在这里拯救这一天(为此感到抱歉)。将底部的所有内容更改为
for i in range(2, x):
#print i
if x % i == 0:
print "This is not a prime number"
return False
#You don't need a break statement because you are returning a value. This means that the function stops because it has completed its job, which is to give back something
print "this is a prime number"
return True
#If all that for looping was to no avail and the number is a prime number, we already know that by this point. We can just return True.
为了迎合 none 正数和零使用 x <= 0
def is_prime(x):
x = int(x)
if x <= 0:
return False
if x == 1:
print "1 is not a prime number"
return False
if x == 2:
print "2 is a prime"
return True
for i in range(2, x):
#print i
if x % i == 0:
print "this is not a prime number"
return False
break
else:
print "this is a prime number"
return True
def is_prime(x):
if x < 2:
return False
for n in range(2,x-1):
if x % n == 0:
return False
else:
return True
def is_prime(x):
# All numbers < 2 are not prime
if x < 2:
return False
for i in range(2, x):
if x % i == 0:
return False
return True
print "is_prime({}): {}".format(-7, is_prime(-7))
print "is_prime({}): {}".format(-10, is_prime(-10))
print "is_prime({}): {}".format(11, is_prime(11))
print "is_prime({}): {}".format(18, is_prime(18))