2016-04-12 8 views
0

なぜ私のコイン投げゲームに頭や尾がいくつあるのかをPythonが印刷していないのはなぜですか?そして、一貫し、0100Pythonが正解を表示しないのはなぜですか?

# part 2 
import random 
heads = 0 
tails = 0 

flip_coin = ['heads', 'tails'] 

while (heads + tails) < 100: 
    flip = random.choice(flip_coin) 
    if flip == heads: 
     heads += 1 
    else: 
     tails += 1 
print(heads) 
print(tails) 

任意のアイデアをプリントアウトされましたか?

答えて

2

次の場合、上記のここ

if flip == heads: # You are comparing with the heads count integer variable 

間違い何がしたいことは

if flip == 'heads': # You want to know if it's the string 'heads' 

であると一貫して0をプリントアウトされ、そのため間違いの100

をしましたflip == headsは常にfalseだったので、それ以外の場合は分析します。常にgらはelse: tails += 1は、したがって、tails = 100heads = 0

+0

yeh私の仲間がちょうどそれを指摘しました! ha cheers – NewUser123

+0

強力な型付き言語を使用すると、この種の問題を防ぐことができます。 –

0

あなたはそれの文字列にするために、引用符の下であなたのheadsを置くことを忘れてしまった、とを実行したためのステートメントは常にfalseであれば、あなたは、それ故に頭は常に0で、tailsは常に100という。

はこれを試してください:あなたは、単にheads(変数)を認識する必要があり

# part 2 
import random 
heads = 0 
tails = 0 

flip_coin = ['heads', 'tails'] 

while (heads + tails) < 100: 
    flip = random.choice(flip_coin) 
    if flip == 'heads': 
     heads += 1 
    else: 
     tails += 1 
print(heads) 
print(tails) 
0

'heads'(文字列)と同じではありません。いずれにしても、Pythonでこのように単純な1対2の選択を行う方が良い(よく、よりPython的な)方法があります。

あなたは、以下のリスト内包のようなものを使用することができます。

>>> import random 
>>> count = 100 
>>> heads = len([1 for i in range(count) if random.randint(0,1) == 1]) 
>>> tails = count - heads 
>>> print(heads, tails) 
43 57 

headsための式はに分けることができます。

  • 空のリストでスタートし、ループを100回実行します。
  • ランダム0/1の値が1のたびに、1をリストに追加します。
  • リストの長さは、最後に、それはあなたがまた1

を反転した回数だ、あなたは正確に100ランダム0/1値でリストを移入し、ちょうどそれらをまとめることができゲット:

>>> heads = sum([random.randint(0,1) for i in range(100)]) 

これは、私が提供した元のコードスニペットよりも簡単ですが、変換、反復、選択を行うことができるという点で、リストの理解の完全な能力を示すものではありません。例えば、以下のコードは、 20:

>>> [i * i for i in range(1,21) if i % 2 == 0] 
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400] 
関連する問題