0

我正在做一个 python 挑战,我不能更进一步......我需要验证 vetor 中的数字是否是素数。喜欢:

  • 向量 = [2,5,12]
    • 2 是素数(真)
    • 5 是素数(真)
    • 12 不是素数(假)

到目前为止,这是我的代码:

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: 'list' object cannot be compiled as an integer

我可以做些什么来操作我列表中的数据?

4

3 回答 3

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())
于 2019-05-06T19:16:02.340 回答
0

您正在尝试根据整数(数据类型)值(1 或 2)评估“整个”列表(数据类型)的值,然后您再次使用整个列表,因为它再次是单个整数值。您应该处理列表中的每个值并单独检查。

例如,您可以使用 for-each 循环来做到这一点:

for value in vetor:
    #do wahtever you want with 'value'
于 2019-05-06T19:07:45.217 回答
0

我建议is_prime接受一个整数作为参数。然后它只是一个纯函数,它接受一个整数并输出一个布尔值。

我还注意到您的 is_prime 实现中存在问题。在您的if-else语句中,该函数在该语句期间无论如何都会返回,因此 for 循环将始终在仅一次迭代后停止。如果您检查的所有除数都将数字除以,您应该只返回 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
于 2019-05-06T19:38:03.487 回答