我正在执行python挑战,因此无法继续进行... 我需要验证向量中的数字是否为质数。 喜欢:
这是我到目前为止的代码:
vetor = [ ]
def is_prime():
x = vetor
if x == 1:
return False
elif x == 2:
return True
for i in range(x):
if (x % i) != 0:
return True
else:
return False
def number():
value = int(input('Write an integer number bigger than 1: '))
if value >= 1:
vetor.append(value)
return number()
elif value < 0:
return number()
elif value == 0:
return is_prime()
print(number())
但是这样做,Python返回了我: TypeError:“列表”对象无法解释为整数
该如何处理列表中的数据?
答案 0 :(得分:0)
您正尝试针对整数(数据类型)值(1或2)评估“整个”列表(数据类型)的值,然后使用整个列表,因为它又是单个整数值。您应该处理列表中的每个单个值,然后分别检查。
例如,您可以使用for-each循环来做到这一点:
for value in vetor:
#do wahtever you want with 'value'
答案 1 :(得分:0)
尝试一下:
vetor = [ ]
def is_prime(x):
if x == 1:
return False
elif x == 2:
return True
for i in range(1, x):
if (x % i) != 0:
return True
else:
return False
def number():
value = int(input('Write an integer number bigger than 1: '))
if value >= 1:
vetor.append(value)
return number()
elif value < 0:
return number()
elif value == 0:
for x in vetor:
if is_prime(x):
print(x, 'is prime')
else:
print(x, 'is not prime')
print(number())
答案 2 :(得分:0)
我建议让is_prime
接受一个整数作为参数。然后,它只是一个纯函数,它接受一个整数并输出一个布尔值。
我还注意到您的is_prime实现中存在问题。在您的if
-else
语句中,无论该语句执行什么操作,该函数都将返回,因此for循环将仅在一次迭代后停止。仅当您检查的所有除数的 all 记下了数字时,才应返回False:
import math
def is_prime(n):
if n <= 1:
return False
for d in range(2, int(math.sqrt(n))+1):
if n % d == 0:
return False
return True
# >>> is_prime(7)
# True
# >>> is_prime(8)
# False
我还认为,迭代而不是递归地编写程序(您的number函数当前会调用自身)会更清楚。看起来像
vector = []
while True:
value = int(input('Write an integer bigger than 1: '))
if value == 0:
break
elif value > 0:
vector.append(value)
for n in vector:
print(n, is_prime(n))
# prints something like:
#
# 1 False
# 2 True
# 11 True