2017-02-03 8 views
0

2つのコインを同じに投げたときに、両方のコインに頭を当てれば勝ち、両方のコインにテールをつけたら失う。2つの乱数が等しいときの「if」ステートメント

私が使用して個別にコインの1を投げた結果を生成することができました:

第二の硬貨のための
def coin_one(): 
one = [random.randint(1, 100) for x in range(100)] 
for x in one: 
    if x <= 50: 
     print('Heads') 
    else: 
     print('Tails') 

とも基本的には同じ方法で使用した:

def coin_two(): 
two = [random.randint(1, 100) for x in range(100)] 
for x in two: 
    if x <= 50: 
    print('Heads') 
    else: 
    print('Tails') 

を私がしようとしています2つのコインが同時に投げられたときにcoin_oneとcoin_twoの両方に「頭」がある場合は、印刷する条件( 'win')を追加します。これはどうすればいいですか?

+0

'プリントを獲得
損失
ヘッズ( '勝利')であればrandom.randint(0,1)== random.randint( 0,1)else print( 'lose') ' –

+0

2つのコインを同時に投げる機能から始めます。現時点では、100種類のコインを別々に投げて結果を印刷する2つの異なる機能があります。 –

+0

これは、単一のコインを投げて「頭」や「尾」を返す単一の関数を作成するのに役立つかもしれません。そして、あなたが書いた他の機能は、私たちが頭を取得した場合に代わりに 'random.randint()' –

答えて

1

両方の計算を1つの方法で結合し、1回のパスでチェックするのはなぜですか?あなたはコインフリップをランダム化しているので、この確率を正確に表すには0/1の2進値で十分です(、暗黙のboolの値を使用して等価チェックを行うボーナスが追加されています)。

def coin_toss(): 
    first_coin_tosses = [random.randint(0, 1) for x in range(100)] 
    second_coin_tosses = [random.randint(0, 1) for x in range(100)] 

    for first_coin_toss, second_coin_toss in zip(first_coin_tosses, second_coin_tosses): 
     if first_coin_toss and second_coin_toss: # Both 1's 
      # We win. 
     elif not first_coin_toss and not second_coin_toss: # Both 0's 
      # We lose. 
     else: 
      # if we get a 1 on one coin and and 0 on the other 
      # or vice versa then we neither win nor lose (we try again). 
+0

我々は実験のための3つの結果を持っている:我々は両方のコインの上に頭を取得する場合、我々は(両方とも1の)を獲得、我々は両方のコインに尾を取得する場合、我々は1 1上のコインを取得し、そして0の場合、我々は最終的には(両方とも0の)を失い、もう一方またはその逆の場合は勝ち負けしません(再試行) –

+0

どの制御フローブランチがどの結果に属するかを明確にするために更新しました。 @TupilweSinyangwe – ospahiu

0

ランダムな値を1-100から戻す2つの関数を記述します。あなたは、次の2つの方法のいずれかで、あなたの結果を得ることができ プリントテール

+0

本当に?まず、2つの関数を書く必要はありません。次に、書式付きコードブロックを使用して答えを書く必要があります。 – Peaceful

0

: プリントヘッドエルス : はその後firstnum> 50とsecondnun> 50場合 のような条件の下に書きます。
最初の方法:
これは簡単な解決策です。 すべてのコイン1とコイン2の結果をリストに格納し、それを呼び出し元のメソッドに戻して、等しいかどうかをチェックします。

第2の方法:
コイン1と2の値ごとに戻って(実際には降ろす)、コールする方法でチェックすることができます。

import random 

def coin_one(): 
    one = [random.randint(1, 100) for x in range(100)] 
    for x in one: 
     if x <= 50: 
      print('Heads') 
      #Use yield to return value and also continue method execution 
      yield 'Heads' #Add this line 
     else: 
      print('Tails') 
      yield 'Tails' #Add this line 


def coin_two(): 
    two = [random.randint(1, 100) for x in range(100)] 
    for x in two: 
     if x <= 50: 
      print('Heads') 
      yield 'Heads' 
     else: 
      print('Tails') 
      yield 'Tails' 

coin_1_result = coin_one() 
coin_2_result = coin_two() 
for coin_1, coin_2 in zip(coin_1_result, coin_2_result): 
    if coin_1 == 'Heads' and coin_2 == 'Heads': 
     print('win') 
    else: 
     print('loss') 

==演算子は

収率が返すかというメソッドを終了せずに呼び出し元の関数にそれぞれの結果を送信することで、リストを構築するのに役立ちます2つのプリミティブ値(int型、文字列)の等価性をチェックするために使用されます(coin_one()またはcoin_two())。

ここで、zip(a、b)では、2つのiterable(例:list)を同時に反復することができます。つまり、最初の反復でcoin_1_result [0]、coin_2_result [0]を返し、2回目にはcoin_1_result [1]、coin_2_result [1]などを返します。

また、両方の機能から最初の値セットを生成した後で、勝敗の結果が即座に印刷されることに気づくことがあります。

出力例:
ヘッド
テイルス
ヘッド