-1

誰かがこのプログラムとこれの出力を説明できますか? if文に疑問があります。これで break ステートメントがどのように機能するか理解できません:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, '*', n/x
            break
    else:
        # loop fell through without finding a factor
        print n, 'is a prime number'

出力:

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
4

4 に答える 4

1

ステートメントは、句breakに入らずにループを終了します。elseに到達せずにループが終了するbreakと、else節に入る。つまり、ループは可能な除数を検索します。見つかった場合は、それを出力し、 を使用してループを終了しbreakます。除数が見つからない場合、for ループは「通常どおり」終了し、else節に入ります (素数が見つかったことが出力されます)。

于 2013-05-08T23:02:56.960 に答える
0

明らかに、このプログラムは素数を特定しようとしています。素数には、1 (明らかに!) とそれ自体以外に因数はありません (つまり、素数を x で割ると、常に剰余があります)。したがって、2 (つまり 1 ではない) からテスト前の数値までのすべての数値をテストして、それがテスト数値の因数であるかどうかを確認する必要があります。

実行中のテストは、次のように進みます。

# S1 is a set of numbers, and we want to identify the prime numbers within it.
S1 = [2, 3, 4, 5, 6, 7, 8, 9]

# test a whether n is PRIME:
for n in S1:
    # if n / x has no remainder, then it is not prime
    for x in range(2, n):
        if...
            I have NO REMAINDER, then x is a factor of n, and n is not prime
            -----> can "BREAK" out of test, because n is clearly not PRIME
            --> move on to next n, and test it
        else:
            test next x against n
            if we find NO FACTORS, then n is PRIME
于 2013-05-08T23:09:59.760 に答える
0

Break は、最も内側のループから直接離れ、外側の for ループの次のステップに進みます。

于 2013-05-09T06:35:40.510 に答える