0

このネストされたループは、リストを読み取るときに正常に機能します。

list = [1,2,3,4,5]
num = 0
while num < 5:
  for i in list:
     print(i)
     num += 1

このループは、リスト内のすべての要素を出力します。問題は、テキストファイルを読み取るときにまったく機能しないことです。テキストの最初の5行を印刷する代わりに、すべてを読み通して印刷します。

f = open(r'C:\Users\Me\Python\bible.txt')
num = 0
while num < 50:
   for line in f:
      print(line)
      num += 1

num変数は各反復後に増加しないと想定することしかできませんが、これには理由があり、解決策はありますか?

4

2 に答える 2

2

コード

for line in f:
    print line
    num += 1

ファイルのすべての行をループしています。同時にそれは1つ増加numします。したがって、forループの最後はnum、ファイル内の行数と等しくなり、おそらく50を超えるため、whileループを終了します。

あなたのスタイルを使用して、あなたは書くべきです:

for line in f:
   print line
   num += 1
   if num > 50: break

また、最初のコードにも同じ問題があります。1つの次元で1つの構造をループする場合、なぜ2つのループが必要なのですか?コードはあまりPythonicではありません。たとえば、次のように書き直す必要があります。

list = [1,2,3,4,5]
for i in list:
   print i

for i,line in enumerate(f):
    print line
    if i > 50: break
于 2013-02-08T16:29:20.980 に答える
1

最初の例でも、あなたのコードが機能するとは思わないでしょう。2つのネストされたループをコーディングするため、外側のループの終了がチェックされる前に、内側のループは常に完了します。外側のルーパーを落とし、次のようなものを挿入することをお勧めします

num> 50の場合:ブレーク

内側のループに。

于 2013-02-08T16:34:12.137 に答える