2015-12-07 7 views
5

次のwhileループを終了する際に問題があります。これはランダムな値が5より大きい場合helloを出力する簡単なプログラムです。プログラムは一度正常に動作しますが、再度実行しようとすると無限ループに入ります。あなたは1回の繰り返しにおいてcount 2または3回をインクリメントするのでこのwhileループを終了するにはどうすればよいですか?

from random import * 

    seed() 
    a = randint(0,10) 
    b = randint(0,10) 
    c = randint(0,10) 
    count = 0 

    while True: 
     if a > 5 : 
      print ("aHello") 
      count = count + 1 
     else : 
      a = randint(0,10) 
     if b > 5 : 
      print ("bHello") 
      count = count + 1 
     else : 
      b = randint(0,10) 
     if c > 5 : 
      print ("cHello") 
      count = count + 1 
     else : 
      c = randint(0,10) 

     if count == 20 : 
      count = 0 
      break 

    count = 0 
+1

Helloラインの20本だけを印刷することを目標にしていますか? –

+1

あなたのロジックに欠陥があります。 'count = 18、a = 6、b = 7、c = 9' - countが21になる状態を考えてみましょう。無限ループのための唯一の終了基準' count == 20'は決して満たされません。 'count 'のインクリメントごとにcountの値をチェックする必要があります。 – OkezieE

+0

はい私は20行のHelloを正確に印刷したい –

答えて

1

次のコードは役に立ちますか?

while True: 
    if a > 5 : 
     print ("aHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     a = randint(0,10) 
    if b > 5 : 
     print ("bHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     b = randint(0,10) 
    if c > 5 : 
     print ("cHello") 
     count = count + 1 
     if count == 20 : 
      break 
    else : 
     c = randint(0,10) 

毎回カウントを増やしてから値を確認する必要があります。

1

、それはここでは正確に20行を取得する一つの方法ですあなたのcount == 20チェック

をスキップします。

from random import seed, randint 

seed() 
a = randint(0,10) 
b = randint(0,10) 
c = randint(0,10) 
count = iter(range(20)) 

while True: 
    try: 
     if a > 5: 
      next(count) 
      print ("aHello") 
     else: 
      a = randint(0,10) 
     if b > 5: 
      next(count) 
      print ("bHello") 
     else: 
      b = randint(0,10) 
     if c > 5: 
      next(count) 
      print ("cHello") 
     else: 
      c = randint(0,10) 
    except StopIteration: 
     break 

このコードにはまだ多くの繰り返しがあります。あなたのA、Bを格納し、listではなく、別々の変数としてC変数は、コードがあなたのwhileループは、0、1、2または3で変数カウントを増やす可能性がある。これは、カウントになる可能性があり、さらに

+0

どうしたらいいですか? –

+0

@AbhayCn、あなたはインクリメント数をインクリメントする毎にチェックを繰り返すことができます –

8

を簡素化することができるようになりますこれらの操作の後

a > 5, count += 1 
b > 5, count += 1 
c > 5, count += 1 

を、カウントの値は、18 + 3 = 21になり、:カウントの値が18であり、以下のような場合は、例えば、20

にわたって20未満の値からの値に行きますしたがって、条件値== 20は決して満たされない。

あなたは

if count >= 20 

でライン

if count == 20 

を交換するか、単にwhileループ内で、あなたのプログラムロジックを変更するか、エラーを修正するには。

+0

しかし、Helloラインを20回正確に印刷したいのですが? –

1

「ブレーク」状態は、変数の2つ以上の値がab、およびcが複数回カウントがインクリメントされ、その場合には5よりも大きい場合に失敗し、> 20を終了しますカウント、およびかもしれませんループは決して終了できません。あなたは変更する必要があります。

if count == 20 : 

if count >= 20: 
1

反復の終わりに、countは複数の増分による20より高くなることがあります。だから私は最後のifステートメントを更新します:

if count >= 20: 

安全に感じる。

1

count>= 20のときにカウントを止めることを目標にしている場合は、whileループにその条件を使用する必要があります。とにかくループの最後でのみ途切れるので、何も中断する必要はありません。

新しい文は

while count < 20: 
    # increment count 

ようになり、その後、whileループの外に、あなたが何か他のもののために再びそれを使用したい場合は0にカウントリセットすることができながら。

関連する問題