Monty Hall Python代码中的神秘错误



我用Python编写了一个Monty Hall程序(这证明了2/3到1/3的机会),但当我用尽可能少的行编写时,(我个人的兴趣)我会出现这些神秘的错误!这是代码:

from random import * 
i,a,abc,t,m=choice(['A','B','C']),raw_input('Switch? (y/n): ').upper(),['A','B','C'],0,0
for j in range(100):
p = choice(abc)
if ([y for y in abc if y not in [i,(choice([x for x in abc if x not in [i,p]]))]][0] if a == 'Y' else i) == p : t += 1
print 'WP: %inErrors: %i' %(t,m) 

我收到这个错误:

Traceback (most recent call last):
File "fewlinesMonty.py", line 5, in <module>
if ([y for y in abc if y not in [i,(choice([x for x in abc if x not in [i,p]]))]][0] if a == 'Y' else i) == p : t += 1
IndexError: list index out of range

因此,我使用try/except来计算使用以下代码的错误:

from random import *
i,a,abc,t,m=choice(['A','B','C']),raw_input('Switch? (y/n): ').upper(),['A','B','C'],0,0
for j in range(100):
p = choice(abc)
try:
if ([y for y in abc if y not in [i,(choice([x for x in abc if x not in [i,p]]))]][0] if a == 'Y' else i) == p : t += 1
except: m += 1
print 'WP: %inErrors: %i' %(t,m) 

错误永远不会超过10%,但对我来说毫无意义!

要修复错误,所需要的就是定义

o = choice([x for x in abc if x not in [i,p]])

然后将相应的代码替换为o。

我知道代码很难阅读(有点不可能),但我很感激任何帮助/建议。

编辑:以下是变量的含义:i=初始门选择(随机)x=要打开的门(不是奖品,不是初始)y=要切换到的门(非x,不是初始的)abc=列表中只有A、B和Ct=总获胜m=神秘错误p=奖品(或"汽车")所在的门

更直接一点有什么错?

from random import choice
initial_guess, flip, wins=choice('ABC'),input('Switch? (y/n): ').upper()=="Y",0
for _ in range(100):
actual_winner = choice('ABC')
wins += 1 if (initial_guess == actual_winner and not flip) or (flip and initial_guess != actual_winner) else 0
print("WP: ", wins)

运行1

Switch? (y/n): y
WP:  62

运行2

Switch? (y/n): n
WP:  31

如果你真的想要最少的线路:

from random import choice 
initial_guess, flip = choice('ABC'), input('Switch? (y/n): ') in ['y','Y']
print("WP: ", sum([[0,1],[1,0]][flip][initial_guess==choice('ABC')] for _ in range(100)))

感谢RobertB解决了这个问题,现在是:(我确实做了一些编辑)

from random import choice 
initial_guess, flip = choice('ABC'), raw_input('Switch? (y/n): ') in ['y','Y']
print "WP: " , sum([[0,1],[1,0]][flip][initial_guess==choice('ABC')] for i in range(100))

最新更新