2016-12-12 2 views
-1

Я пытаюсь написать список простых чисел, пока мой список не достигнет определенного размера.Создание цикла while в Python

То, что я в настоящее время это:

list = [] 
i = 2 
while len(list) <= 10000: 
    if prime(i) == 0: 
    list.append(i) 
i = i+1 

print(list[-1]) 

где штрих (х) представляет собой главную функцию.

Однако это просто заставляет python распечатывать 0 и 1 в бесконечно замкнутом цикле, я также попытался положить i = 2 внутри цикла while, но только что напечатал 10 001 2.

Может кто-то пожалуйста, указать, где я не так, и, пожалуйста, объясните, что это такое, пока петли я не совсем понимаю, спасибо

+2

Исправьте ваш отступ, похоже, что он перепутался, когда вы скопировали вопрос. – Barmar

+1

Действительно ли 'prime()' действительно возвращает '0' вместо' True', когда число является простым? – Barmar

+1

Как и @Barmar, вам нужно отступывать все в соответствии с инструкцией ** if **, за исключением инструкции печати. – Jon

ответ

1

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

Я изменил имя переменной list на primes. list - встроенное имя функции внутри Python, и иногда это может вызвать проблемы с использованием имени переменной.

primes = [] 
i = 2 
while len(primes) <= 10000: 
    if prime(i) == 0: 
     # Line here is indented further 
     primes.append(i) 
    # Line here is indented further 
    i += 1 

print(primes) 
print(primes[-1]) 

Как это сделать? Похоже, ваша проблема была вызвана отсутствием надлежащего отступа. Обратите внимание на изменения в строках под вашим циклом while.

Edit:

Однако это только делает питон Распечатайте 0 и 1. в, казалось бы, бесконечный цикл

Это имеет смысл, что цикл, пока будет продолжаться вечно, если ваш отступы был, как написано в вашем первоначальном ответе. Тот факт, что его выход изменяется между 0 и 1, является странным, так как технически единственным входным значением было бы i = 2. Попробуйте выполнить это как в этом сообщении, и посмотрите, работает ли ваша функция prime.

+0

@ TadhgMcDonald-Jensen Я действительно пытался запустить код, но поскольку у нас нет функции 'prime', я не смог этого сделать. 'Len (list)' был надзором, который просто исправлялся. Хотя я ценю ваше внесение исправлений - пожалуйста, подумайте о том, чтобы быть менее быстрым, чтобы изгонять предположения. – Chuck

+0

да Прошу прощения, я очень против ответов типа «вот рабочий код» и, как я только узнал, быстро судить о людях, которые их публикуют (с этого момента я попытаюсь сдержать:) –

+0

@ TadhgMcDonald-Jensen Нах человек, ты классный, ты классный, мы хороши! Вы были правы: ему нужны объяснения, и нехорошо публиковать «половинные» ответы, которые не совсем работают. – Chuck

Смежные вопросы