2017-03-03 12 views
1

fooという名前のリストにn個のランダムな値を格納しています。私はランダムな値を連続して追加し、新しい値をfoo [i]に格納するループを作りたいと思っています。これはこれまでの私のコードです。私がこれを実行するたびに、私はwhileループを終了できません。Pythonでリストに値を追加して上書きする

I [i]はラインで

 foo.insert(i, random.randrange(4,41)) 

私は実際にFOOに格納されている値に加算していないよので、これは働いていない理由があると思いますが、私は何を把握することができません

import random 
foo=[] 
i=0 
flag = False 

print("How many horses do you want to race?") 
horses = eval(input()) 
print (horses) 

while flag == False: 
    for i in range(horses): 
     foo.insert(i, random.randrange(4,41)) 
    print(a) 
    if foo[i] >= 5280: 
     flag = True 
    else: 
     i=i+1 

代わりに行う。助けてくれてありがとう!あなたはおそらく、それを変更したい

+2

'eval(input())':は避けてください。代わりに 'int(input())'を実行してください –

+0

問題はあなたのループの外側で 'i'インデックスを使用していますか?それは本当に奇妙です... –

+0

あなたはfooにいくつのitensを挿入したいですか?このコードでは、n回要素を挿入します。 おそらく次の行があります:if foo [i]> = 5280: is:i> = 5280: –

答えて

1

import random 

i=0 
flag = False 

print("How many horses do you want to race?") 
horses = int(input()) 
print (horses) 

foo = [0] * horses #initialize horse values 
while not flag: 
    for i in range(horses): 
     foo[i] += random.randrange(4,41) #move the horse a random amount 
     if foo[i] >= 5280: 
      flag = True #a horse has won 
      break #exit the loop 

I:

  • あなたは
  • を初期化していなかったa変数は、ループの外側i変数を使用して取り出し、削除(これはあなたはしないでください)
  • 実際に馬に追加する行を修正しました
  • それが出 flag == False取り、PEP 8から not flag:
    • に置き換え
    • ループ中に終了しますので、
    • は、ループ内でループ終了でラインを入れて0
    • で馬のすべてを初期化:Don't compare boolean values to True or False using == .
+0

foo [i] + = random ... ' – 9000

+0

@ 9000はそれを気付かなかった、ありがとう。 – rassar

+0

助けてくれてありがとう。私はあなたが書いたことについて質問があります。範囲foo = [0(範囲内の馬)]は何をしますか?私はそれがfooと呼ばれるリストを作ることを理解するが、私は0であるが、私を台無しにしている。それは0で馬の変数のカウントを開始しますか?したがって、3馬を入力すると、リストには元のコードのように0,1,2ではなく0,1,2のインデックスがありますか? – DrJenkins

1

あなたは完全にfoo上で明示的なループを回避することができます。

foo = [0 for _ in range(horses)] # or even [0] * horses 
over_the_line = [] # Index(es) of horses that have crossed the line. 
while not over_the_line: 
    foo = [pos + random.randint(...) for pos in foo] # Move them all. 
    over_the_line = [i for (i, pos) in enumerate(foo) if pos >= 5280] 

# Now you can decide who from over_the_line is the winner. 

また、あなたが呼び出された場合、あなたの変数horse_pos代わりのfoo、物事が理解しやすいだろう。また、各馬の位置の更新後にアニメーションの表示手順を追加することを願っています! :)

関連する問題