我编辑了上一个问题,因为我提出了我认为正确的代码。 这背后的逻辑应该是: 虽然套装没有结束并且不是领带10:10:玩家A开始投球并且无论他是否赢得积分都进行两次,然后玩家B接受发球并且也进行两次。它一直持续到设置结束,除非服务器更改每个得分点时绑定10点10分。
任何人都可以检查代码是否完美无瑕?谢谢。
def simOneSet(probA, probB):
serving = "A"
scoreA = scoreB = 0
while not setOver(scoreA, scoreB):
if scoreA != 10 and scoreB != 10:
if serving == "A":
for i in range(2):
if random() < probA:
scoreA += 1
else:
scoreB += 1
serving = "B"
else:
for i in range(2):
if random() < probB:
scoreB +=1
else:
scoreA += 1
serving = "A"
# when there is a tie 10:10
else:
if serving == "A":
if random() < probA:
scoreA += 1
serving = "B"
else:
scoreB += 1
serving = "B"
else:
if random() < probB:
scoreB += 1
serving = "B"
else:
scoreA += 1
serving = "A"
return scoreA, scoreB
答案 0 :(得分:3)
我会用dict在玩家之间“切换”:
other = {'A':'B', 'B':'A'}
然后,如果serving
等于'A'
,那么other[serving]
将等于'B'
,如果serving
等于'B'
,则{{1}等于other[serving]
。
您还可以使用collections.Counter来跟踪分数:
'A'
还要注意这段代码中的内容
In [1]: import collections
In [2]: score = collections.Counter()
In [3]: score['A'] += 1
In [4]: score['A'] += 1
In [5]: score['B'] += 1
In [6]: score
Out[6]: Counter({'A': 2, 'B': 1})
有两个块基本上是相同的想法重复两次。这表明可以通过使用函数来加强代码。例如,我们可以定义一个函数 if serving == "A":
for i in range(2):
if random() < probA:
scoreA += 1
else:
scoreB += 1
else:
for i in range(2):
if random() < probB:
scoreB +=1
else:
scoreA += 1
,当给出一个概率serve
和一个玩家(prob
或A
)时,它会返回获胜的玩家:
B
然后上面的代码将成为
def serve(prob, player):
if random.random() < prob:
return player
else:
return other[player]
因此,您可以通过这种方式使代码紧凑:
for i in range(2):
winner = serve(prob[serving], serving)
score[winner] += 1
答案 1 :(得分:0)
这是一个提示:
如果您拥有该套装中的圆形编号并知道哪个玩家开始投放,您就拥有了所需要知道的所有人。
然后在循环的开头或结尾处的简单if语句就足够了。
如果这太复杂,请尝试通过模拟服务器每周开始的游戏开始。
答案 2 :(得分:0)
可能有帮助的是语法
var = 1 if var == 2 else 2
如果var为2,则var为1,如果var为1,则var为2.我觉得这是学校问题,所以我不想完全放弃答案:)
提示:你的想法是正确的。
答案 3 :(得分:0)
来自随机导入*
P1=P2=0
while 1 :
p1=p2=0
while 2 :
if random() < 0.5 : p1 +=1
else : p2 +=1
if(p1 >=11 or p2 >=11) and abs(p1-p2) > 1: break
P1 += p1 > p2; P2 += p2 > p1
print "%2d : %2d (%d : %d)" % (p1, p2, P1, P2)
if P1 == 4 or P2 == 4 : break
我希望这有帮助,它对我有用