2017-02-03 52 views
0

我想要有一種情況,當我們在同一個硬幣上拋擲兩個硬幣時,如果我們贏得兩個硬幣的頭部,並且如果我們在兩個硬幣上都得到尾部,失去。'if'當兩個隨機數字相等的時候聲明

我已經能夠生成扔硬幣的一個單獨使用效果:

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') 

我想如果我們在coin_one和coin_two兩個硬幣同時投擲的時候都有'頭像',就會添加一個打印('贏')的條件。我該怎麼做呢?

+0

'打印( '雙贏')如果random.randint(0,1)== random.randint( 0,1)else print('lose')' –

+0

以一個同時拋出兩個硬幣的函數開始。目前你有兩個不同的功能,分別拋出100個硬幣並打印結果。 –

+0

它可能會幫助您考慮創建一個拋出一個硬幣並返回「正面」或「反面」的單一功能。然後你編寫的其他函數可以使用這個函數,而不必用'random.randint()' –

回答

1

爲什麼不在一種方法下將兩種計算結合起來,並在一次通過中執行檢查?既然你隨機拋硬幣, 0/1的二進制值足以準確地表示該概率(以及使用其隱含的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

我們有三個實驗結果:如果我們贏得兩個硬幣的頭(兩個都是1),如果我們在兩個硬幣上都得到尾巴(兩個都是0),最後如果我們在一個硬幣上得到1,並且0另一個或反之亦然,那麼我們既不會贏也不會輸(我們再試一次) –

+0

更新使其更清楚哪個控制流分支屬於哪個結果。 @TupilweSinyangwe – ospahiu

0

編寫兩個函數,它們將從1-100返回隨機值。 然後下面寫條件像 如果firstnum> 50和secondnun> 50: 打印頭 否則: 打印尾

+0

真的嗎?首先,不需要編寫兩個函數。其次,你應該使用格式化的代碼塊來編寫答案。 – Peaceful

0

您可以通過以下兩種方式之一實現你的結果。
第一種方法:
這是直接的解決方案。 將所有硬幣和硬幣兩個結果存儲在列表中,並將其返回給調用方法並檢查相等性。

第二種方法:
您可以爲每個硬幣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') 

==運算符用於檢查

收率有助於通過每個結果發送到調用函數不返回或退出調用的方法建立一個列表中的兩個基元值(INT,字符串)的平等(coin_one()或coin_two())。

這裏zip(a,b)允許兩個迭代(例如:list)同時迭代。即它將在第一次迭代中返回coin_1_result [0],coin_2_result [0],在第二次迭代中返回coin_1_result [1],coin_2_result [1]等。

此外,您還可以注意到,在從兩個函數中生成第一組值後,將立即打印輸贏結果。

輸出示例:

尾巴
損失
首腦
首腦
贏得