Не вырвавшись за петлю - PullRequest
       2

Не вырвавшись за петлю

0 голосов
/ 24 декабря 2011

По какой-то причине, когда число кандидатов достигает 21, оно понимает, что 21 делится на 3, но затем не выйдет из цикла for / В отличие от этого, например, для 25, если ноты 25 делятся на 5 вспыхивает.

Похоже, что когда div == 3, он не выходит из цикла. Почему это?

for cand in range (3,100):
    if cand%2 != 0:
        if ((cand ==3) or (cand ==5) or (cand ==7) or (cand ==11) or (cand == 13)):
            print str(cand) + ' is prime.'
        else:
            x = sqrt(cand)
            y= int (x)
            for div in range(3, (y+2)):
                if (cand%div == 0):
                    print div
                    print str(cand) + ' is divisible by' + str(div)
                    div = 10*y
                elif (div == y):
                    print str(cand) + ' is prime.'

Вот вывод кода:

3 is prime.
5 is prime.
7 is prime.
3
9 is divisible by3
11 is prime.
13 is prime.
3
15 is divisible by3
17 is prime.
19 is prime.
3
21 is divisible by3
21 is prime.
23 is prime.
5
25 is divisible by5
3
27 is divisible by3
27 is prime.
29 is prime.
31 is prime.
3
33 is divisible by3
33 is prime.
5
35 is divisible by5
37 is prime.
3
39 is divisible by3
39 is prime.
41 is prime.
43 is prime.
3
45 is divisible by3
5
45 is divisible by5
45 is prime.
47 is prime.
7
49 is divisible by7
3
51 is divisible by3
51 is prime.
53 is prime.
5
55 is divisible by5
55 is prime.
3
57 is divisible by3
57 is prime.
59 is prime.
61 is prime.
3
63 is divisible by3
7
63 is divisible by7
5
65 is divisible by5
65 is prime.
67 is prime.
3
69 is divisible by3
69 is prime.
71 is prime.
73 is prime.
3
75 is divisible by3
5
75 is divisible by5
75 is prime.
7
77 is divisible by7
77 is prime.
79 is prime.
3
81 is divisible by3
9
81 is divisible by9
83 is prime.
5
85 is divisible by5
85 is prime.
3
87 is divisible by3
87 is prime.
89 is prime.
7
91 is divisible by7
91 is prime.
3
93 is divisible by3
93 is prime.
5
95 is divisible by5
95 is prime.
97 is prime.
3
99 is divisible by3
9
99 is divisible by9

Ответы [ 4 ]

4 голосов
/ 24 декабря 2011

Цикл for не является циклом while.

В Python единственным типом цикла for является то, что в других языках - foreach - он выполняет итерацию по списку элементов.В вашем случае вы перебираете диапазон, то есть список целых чисел от 3 до y + 2.Количество элементов в списке определяет время окончания итерации, а не значение любого из них.Когда вы изменяете div в течение одной итерации цикла, это не влияет на остальные элементы.

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

1 голос
/ 24 декабря 2011

В отличие от этого, например, для 25, если ноты 25 делятся на 5, а затем вырываются.Также выполняется цикл для div = 6, но ничего не печатается, потому что не выполняется ни одно из условий if.Ваш цикл for устанавливает индекс в начале каждой итерации, поэтому ваша строка div=10*y совершенно бессмысленна.

1 голос
/ 24 декабря 2011

Петли Python не работают таким образом:

#!/usr/bin/env python
for a in range(1,20):
        print a
        a = 39

Рассмотрим:

for a in [32,14,"a",False]:
        print a
        a = True

Например.

1 голос
/ 24 декабря 2011

В вашем коде нет выражения break.

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