почему моя функция диапазона не начинается со значения 'start'? - PullRequest
2 голосов
/ 03 мая 2020

Существует общая проблема HW для перечисления всех простых чисел с помощью python, и с помощью SO и других сайтов нашли решение этой проблемы, используя циклы for, аналогичные приведенным ниже:

def count_primes(num):
primes = []
for y in range (2, num):
    for z in range(2, y):
        if y % z == 0:
            break
    else:
        primes.append(y)
return primes

Когда я печатаю первый экземпляр z, yi будет ниже:

(2,3)

мой вопрос: почему первый экземпляр y = 3?

, учитывая, что диапазон равен (2, num) , не будут ли случаи y проходить от 2 до num - 1?

, очевидно, если бы вышеприведенное было верным, 2 не было бы в списке, но я не могу обернуться, почему оно начинается с 3 до заставить эту функцию работать.

Кроме того, когда я проверял значения с помощью print, y действительно начинает 2, но начинается с 3 после секунды для l oop:

    def count_primes(num):
    primes = []
    for y in range (2, num):
        print(f'y = {y}')
        for z in range(2, y):
            print(f'y = {y}, z = {z}')
            #if y % z == 0:
                #break
        #else:
            #primes.append(y)
    #return primes

    count_primes(5)

это возвращает:

y = 2
y = 3
y = 3, z = 2
y = 4
y = 4, z = 2
y = 4, z = 3

Я ценю любую ясность, которую вы можете предоставить для этого значения y

* Я полагаю, что это потому, что диапазон (2,2), по существу, недопустим, поэтому он цикличен снова к y = 3, но если кто-то может подтвердить (или еще лучше) объяснить, почему это случилось, что должно быть здорово

Ответы [ 2 ]

1 голос
/ 03 мая 2020
x = 1
y = 5
for i in range(x, y):
    print(i)

выдаст вывод в виде:

1
2
3
4

Обратите внимание, что y=5 и 5 не напечатаны.

ie, верхняя граница равна единице меньше заданной

Таким образом, в этом случае: range(2, 2) и range(2,3) не имеют ни одной.

1 голос
/ 03 мая 2020

Да, когда начальное значение равно остановке для диапазона, итератор пуст - т.е. никаких итераций в этот раз.

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