我试着用英语规则来模拟壁球比赛的得分。它们是:
我的代码是:
import random
def eng_game(a,b):
A = 'bob'
B = 'susie'
players = [A, B]
server = random.choice(players)
print server
points_bob = 0
points_susie= 0
prob_A_wins = 0.4
prob_B_wins = 0.6
while points_bob or points_susie < 9:
probability = random.random()
print probability
if probability < prob_A_wins and server == A:
points_bob += 1
elif probability < prob_A_wins and server == B:
server == A
print server
if probability > prob_A_wins and server == B:
points_susie += 1
elif probability > prob_A_wins and server == A:
server == B
print server
print points_bob
print points_susie
这段代码返回Susie以9-0获胜的结果,在某些情况下,服务器应该被交换给Bob以赢得积分,但这种情况并没有发生。发球和苏茜在一起,她赢了。
发布于 2012-12-13 20:12:02
我认为问题在于server == A
和server == B
的语句应该是server = A
和server = B
,这样就可以进行赋值,而不是进行比较。
我看到的另一个边缘情况错误是,如果概率最终正好是0.4,你的程序就会表现得就像虚拟服务从未发生过一样。
我会把你的循环改为:
while points_bob < 9 and points_susie < 9:
probability = random.random()
print probability
if probability <= prob_A_wins and server == A:
points_bob += 1
elif probability <= prob_A_wins and server == B:
server = A
print server
if probability > prob_A_wins and server == B:
points_susie += 1
elif probability > prob_A_wins and server == A:
server = B
print server
print points_bob
print points_susie
发布于 2012-12-13 20:29:30
我怀疑你的循环状况
while points_bob or points_susie < 9:
不是你想的那样。当将数字解释为布尔值时,如果数字为零,则为False
,否则为True
,这意味着这实际上将检查(points_bob != 0) or (points_susie < 9)
。这只会是False
(也就是说,循环只会停止)当Susie有至少9分而Bob没有点--如果Bob得到任何分,游戏就会永远继续下去。
要解决这个问题,您应该切换到一个and
条件。这只会继续,当两个球员都有不到9分,或者说,它的另一种方式,它将停止,只要有人达到9分。因此,您的循环条件应该是
while points_bob < 9 and points_susie < 9:
如果您想将获胜条件更改为10分,则需要将玩家的积分与变量而不是常量进行比较,然后根据需要更改变量:
winning_score = 9
while points_bob < winning_score and points_susie < winning_score:
# ...
# Accumulate your points etc.
# ...
# Now need to reach ten points to win.
winning_score = 10
https://stackoverflow.com/questions/13867578
复制相似问题