我想要的情况是,当我们同时扔两枚硬币时,如果我们在两枚硬币上获得头,我们就赢了,如果我们在两枚硬币上都有尾巴,我们输了。
我已经能够使用以下方式分别抛出其中一个硬币的结果:
mod$x
以及使用基本相同方法的第二枚硬币:
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')
我正在尝试添加一个可以打印(&#39; win&#39;)的条件,如果我们有&#39; head&#39;当两枚硬币同时被抛出时,在coin_one和coin_two中都有。我该怎么做?
答案 0 :(得分: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).
答案 1 :(得分:0)
编写两个将从1-100返回随机值的函数。 然后写下面的条件就像 如果firstnum> 50且secondnun> 50: 打印头 其他: 打印尾巴
答案 2 :(得分: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,string)
的相等性yield有助于通过将每个结果发送到调用函数来构建列表,而无需返回或退出被调用的方法(coin_one()或coin_two())。
这里zip(a,b)允许两个迭代(例如:list)同时迭代。即它将在第一次迭代中返回coin_1_result [0],coin_2_result [0],在第二次迭代中返回coin_1_result [1],coin_2_result [1]等等。
此外,您还可以注意到,在从两个函数中产生第一组值后,将立即打印输赢结果。
样品输出:
元首
尾巴
损失
元首
元首
赢