在python中操作列表

时间:2019-05-06 19:04:56

标签: python list-manipulation

我正在执行python挑战,因此无法继续进行... 我需要验证向量中的数字是否为质数。 喜欢:

  • vetor = [2,5,12]
    • 2是质数(TRUE)
    • 5是质数(TRUE)
    • 12不是素数(FALSE)

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

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:“列表”对象无法解释为整数

该如何处理列表中的数据?

3 个答案:

答案 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