Показать простые числа из списка в Python. Ошибка при произнесении неподдерживаемых операндов - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь создать программу, которая получает целое число от пользователя, а затем создает список целых чисел, начиная с 1 до целого числа, введенного пользователем. Например, если пользователь вводит «8», то будет создан список [2, 3, 4, 5, 6, 7, 8]. После этого я хочу, чтобы он просматривал каждое целое число в списке и отображал только простые числа вплоть до (или включая) пользовательского ввода.

def main():
    #get user input of integer
    user_integer = int(input('Please enter an integer greater than 1: '))
    #call function that creates list of numbers up to user input
    integer_list = create_list(user_integer)
    #call function that returns prime numbers
    prime_numbers = prime_number(integer_list)
    #display prime numbers
    print('The prime numbers up to the integer you entered are:', prime_numbers)

def create_list(x):
    integer_list = []
    numbers = 2
    while numbers != x:
        integer_list.append(numbers)
        numbers += 1
    return integer_list

def is_prime_number(num):
    for i in range(2,num):
        if num%i==0:
             return False
        else:
             return True

def prime_number(x):
    prime_numbers = []
    for i in (x):
        if is_prime_number(i):
            prime_numbers.append(i)

    return (prime_numbers)

main()

Редактировать: я отредактировал код, включив в него функцию, которая проверяет каждое число отдельно, если это простое число. Тем не менее, он, кажется, возвращает только нечетные числа, а не простые числа. Например, если я введу «13», он вернет список [3, 5, 7, 9, 11]. Очевидно, 9 не является простым числом.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я думаю, что ваш код можно улучшить, исключив вычисления и циклы по модулю. Также лучше использовать проверенный и проверенный алгоритм генерации простых чисел, который называется Сито Эратосфена

def main():
    user_integer = int(input('Please enter an integer greater than 1: '))
    integer_list = list(range(2,user_integer))
    prime_numbers = prime_number(integer_list)

    #display prime numbers
    print('The prime numbers up to the integer you entered are:', prime_numbers)

def prime_number(nums):
    highest = nums[-1] + 1
    sieve = [True] * (highest)
    sieve[0:1] = [False, False]

    for i in range(2, highest):
        if sieve[i]:
            for j in range(2 * i,highest,i):
                sieve[j] = False
    primes = []
    for i in range(2, highest):
        if sieve[i]:
            primes.append(i)
    return primes


if __name__ == "__main__":
    main()
0 голосов
/ 08 ноября 2018

Проблема в том, что вы пытаетесь найти остаток от погружения списка по номеру. Вот почему вы получаете сообщение об ошибке:% является неподдерживаемым операндом для типов list и int. Я бы предложил разобраться в логике, чтобы определить, является ли число простым, а затем в цикле for вызовите этот метод. Если он возвращает true, добавьте его в список простых чисел.

def is_prime_number(num):
    for i in range(2, num):
        if num % i == 0:
            return False
    return True

def prime_number(x):
    prime_numbers = []
    for i in (x):
        if is_prime_number(x):
            prime_numbers.append(i)
    return prime_numbers

Вам не нужны скобки вокруг списков, и поскольку вы не используете список составных чисел, вам не нужно его отслеживать. Внедрение логики в ее собственную функцию помогает сделать код чище и легче на него смотреть. Не стесняйтесь также оптимизировать функцию простого числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...