我只是在学习python(有史以来的第一门语言),并且以我发现的乐趣来实现我所发现的东西。我建立了一个伪老虎机赔率计算器。但是,它仅止于一项大奖。有没有办法让它一遍又一遍地给出n次游戏的平均尝试次数以获得大奖?
这是我的代码
#!/usr/bin/env python
import random
a = 1
while a >0 :
l1 = random.randrange(36)
l2 = random.randrange(36)
l3 = random.randrange(36)
print l1, l2, l3
if l1 == l2 == l3 == 7:
print 'grand prize winner!!!'
break
elif l1 == l2 == l3:
print 'you won! congratulations'
print 'it took', a, 'attempts to win'
else:
a += 1
print 'sorry... try again'
print 'attempt', a
另外,有没有办法告诉我在赢得大奖期间有多少正常的胜利
最佳答案
大奖break
块中的if
语句退出外部while
循环。如果您希望它继续运行,请删除break
。另外,作为样式点,while True:
或while 1:
更加清楚地创建了无限循环。至于问题的第二部分,您有a
计数器,但是您可能希望捕获更多数据,如下所示:
import random
def play(till_jackpot_count):
game_data_per_jackpot = [{'plays' : 0, 'wins' : 0}]
wheel_values = xrange(36)
wheels = [0, 0, 0]
while till_jackpot_count >= len(game_data_per_jackpot):
wheels = [random.choice(wheel_values) for wheel in wheels]
game_data_per_jackpot[-1]['plays'] += 1
print '%d plays since last jackpot' % game_data_per_jackpot[-1]['plays']
print '%d wins since last jackpot' % game_data_per_jackpot[-1]['wins']
print '%d total plays' % sum([data['plays'] for data in game_data_per_jackpot])
print '%d total wins' % sum([data['wins'] for data in game_data_per_jackpot])
print '%d total jackpots' % (len(game_data_per_jackpot) - 1)
print 'this play: {} {} {}'.format(*wheels)
if len(set(wheels)) == 1:
if wheels[0] == 7:
print 'jackpot!'
game_data_per_jackpot.append({'plays' : 0, 'wins' : 0})
else:
print 'win!'
game_data_per_jackpot[-1]['wins'] += 1
return game_data_per_jackpot[:-1]
play(10)
我还在顶部隐藏了一个
till_jackpot_count
控件,该控件将在达到一定数量的累积奖金后结束循环。如果您想在功能本身之外进一步分析测试结果,该函数还会返回测试结果,但是由于未将结果分配给任何内容,因此该结果仅会放在此处。对于您自己的研究,此代码使用列表(
[]
),字典({}
),元组(()
),旧样式字符串格式('%d' % var
),新样式字符串格式('{} {} {}'.format(*iterable)
),列表理解([a for a in b]
),切片(list[:]
)和一些内置函数(sum
,len
)以及您已经熟悉的random
库和while
循环。我还将您的random.randrange()
换成了预构建的random.sample()
稍微更简单,效率更高的xrange()
。关于python - 平均获胜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12626413/