我只是在学习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[:])和一些内置函数(sumlen)以及您已经熟悉的random库和while循环。我还将您的random.randrange()换成了预构建的random.sample()稍微更简单,效率更高的xrange()

关于python - 平均获胜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12626413/

10-16 07:36