манипулировать списком в Python - PullRequest
0 голосов
/ 06 мая 2019

Я делаю вызов Python и не могу идти дальше ... Мне нужно проверить, являются ли числа в векторе простыми числами.Например:

  • vetor = [2,5,12]
    • 2 простое (ИСТИНА)
    • 5 простое (ИСТИНА)
    • 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: 'list'объект не может быть интерпретирован как целое число

Что я могу сделать, чтобы манипулировать этими данными в моем списке?

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

Попробуйте это:

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())
0 голосов
/ 06 мая 2019

Я бы рекомендовал 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

Я также думаю, что было бы яснее писать вашу программу итеративно, а не рекурсивно (Ваша функция номера в настоящее время вызывает себя).Это может выглядеть как

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
0 голосов
/ 06 мая 2019

Вы пытаетесь оценить значение «целого» списка (тип данных) по отношению к целочисленному (типу данных) значению (1 или 2), а затем вы снова используете весь список как одно целочисленное значение,Вам следует обратиться к каждому значению в списке и проверить его отдельно.

Вы можете сделать это, например, с помощью цикла for-each:

for value in vetor:
    #do wahtever you want with 'value'
...