можно получить цикл for для запуска всего диапазона? - PullRequest
0 голосов
/ 12 октября 2018

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

def getNumber(main):
    n = int(input())
return n


def isPrime(n):
    list=[2]
    if n > 1:
        for i in range(2, n+1):
            for a in range (2, n):
                if i*a != i and i%a != 0 and i%2 != 0:
                    list.append(i)
                    break
        return "\n".join(map(str, list))`

def main():
n = getNumber(main)
print(isPrime(n))

main()

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы можете использовать блок if/else, если ваш break никогда не выполняется ни одним элементом в итерируемой инструкции else.https://docs.python.org/3/tutorial/controlflow.html 4.4 демонстрирует это выполнение этой почти точной задачи.

n = int(input('Enter number: '))
if n <= 1:
    print('No primes')
else:
    primes = []
    for i in range(2, n +1):
        for k in range(2, i):
            if not i % k:
                break
        else:
            primes.append(i)
    print(*primes)
    # Enter number: 50
    # 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
0 голосов
/ 12 октября 2018

Вы неправильно поняли свою логику.Вот что делает ваш код:

  1. Изучайте числа в порядке возрастания от 2 до введенного n.
  2. Для каждого числа i проверьте, есть ли какое-либо число a между 2 и n делит i
  3. Если a делит i, добавьте i в список, а затем перейдите к следующему i

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

def getPrimesLessThanOrEqualTo(n):
    if n <= 1:                # Anything 1 or less has no primes less than it.
        return ""             #    So, return nothing.
    list = [2]                # 2 is the lowest prime number <= n
    for i in range(3, n+1):   # We start at 3 because there's no need to re-check 2
        for a in list:        # Instead of iterating through everything less than
                              #   i, we can just see if i is divisible by any of 
                              #   the primes we've already found
            if i % a == 0:    # If one of the primes we've found divides i evenly...
                break         # then go ahead and try the next i
            list.append(i)    # Now, if we got through that last bit without 
                              #   hitting the break statement, we add i to our list
    return "\n".join(list)    # Finally, return our list of primes <= i

Если вы хотитеЧтобы быть более эффективным, вы могли бы даже использовать range(3, n+1, 2), чтобы сосчитать по два - таким образом, избегая смотреть на четные числа вообще.

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