2

Pythonチュートリアルでは、例(以下にコピー)がありelseますが、インデントするべきではありませんか?コードを実行しても機能しませんでしたが、インデントして(else)、機能しました。、私が言っていることは正しいですか?ドキュメントが間違っている場合、Pythonのドキュメント担当者にバグとして報告するにはどうすればよいですか?

>>> 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'
...
4

3 に答える 3

7

リンクしたドキュメントを参照してください。

ループステートメントにはelse句が含まれる場合があります。ループ時に実行されます
リストの枯渇(for付き)または条件が発生したときに終了します
falseになります(whileを使用)が、ループがブレークによって終了した場合はそうではありません
声明。これは、次のループで例示されています。
素数:
于 2012-08-30T10:40:09.563 に答える
6

この例は機能しており、インデントは問題ありません。こちらをご覧ください。

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

ご覧のとおり、は次のルールに従ってelse2番目に関連しています。for

ループステートメントにはelse句が含まれる場合があります。これは、リストの枯渇によってループが終了したとき(with for)または条件がfalseになったとき(with while)に実行されますが、breakステートメントによってループが終了したときは実行されません

この例では、(2行目の)2番目のforが実行を終了したが、breakコマンドを実行しない場合にelseが呼び出されることを意味します。これは、にn % x == 0評価されない場合のみですTRUE

いずれ(n % x == 0)かの時点でブレークが呼び出されると、2番目のforが停止nし、最初のforから1ずつ増加し(n = n + 1)、2番目のforが新しいで再度呼び出されnます。

于 2012-08-30T10:41:07.397 に答える
0

これはPythonのfor ... else http://psung.blogspot.co.il/2007/12/for-else-in-python.htmlの例です。

基本的elseに、forループが終了し、正常に終了した後、その部分のコードを呼び出します(決して壊れていません)

于 2012-08-30T10:40:09.393 に答える