我有两个变量:“得分”和“奖励”,都初始化为0.每次得分增加5,我希望奖金增加1.我尝试过使用itertools.repeat,但我可以'让它工作。
初步想法:如果得分是5的倍数,并且至少是5,那么将奖金增加1。
if score>=5 and score%5==0:
bonus += 1
不幸的是,这不起作用,因为我们会继续永久增加奖金。换句话说,当得分为5时,奖励变为1。 。 。然后2。 。 。等等,没有约束力。
想法:记录得分;如果得分是5的倍数,并且至少是5,那么检查我们之前是否已经看过5的倍数。如果我们之前没有看过5的这个倍数,那么将奖金增加1.现在我们可以避免重复计算。
if score>=5 and score%5==0:
for x in range(5,score+1,5):
score_array_mults_of_5 = []
score_array_mults_of_5.append(x)
for i in score_array_mults_of_5:
if (i in range(5,score-5,5))==False:
for _ in itertools.repeat(None, i):
bonus += 1
。 。 。除了这个实现也重复计算,也不起作用。
我已经阅读了StackExchange,Python文档,我已经尝试了两个小时的自己的解决方案了。请帮忙。
编辑:谢谢大家。所有有用的答案。对于询问还有什么影响奖金的人:如果用户按下键盘按钮,则奖励下降1.我没有提及该部分,因为它似乎无关紧要。
答案 0 :(得分:1)
嗯,你总是可以做到
bonus = int(score/5).
如果分数确实如此(如果可能,以及您想要的行为),这也将确保奖金下降
但是你也可以使用你的第一个实现,只要你只是在更新得分时进行检查,而不是每个游戏周期。
答案 1 :(得分:0)
您可以bonus
score/5
:
>>> score = bonus = 0
>>> score+=5
>>> bonus = score/5
>>> bonus
1
>>> score+=5
>>> score+=5
>>> score+=5
>>> score+=5
>>> score
25
>>> bonus = score/5
>>> bonus
5
>>>
这是一种证明:
的方法>>> while True:
... try:
... print 'Hit ^C to add 5 to score, and print score, bonus'
... time.sleep(1)
... except KeyboardInterrupt:
... score+=5
... bonus = score/5
... print score, bonus
...
Hit ^C to add 5 to score, and print score, bonus
Hit ^C to add 5 to score, and print score, bonus
^C5 1
Hit ^C to add 5 to score, and print score, bonus
Hit ^C to add 5 to score, and print score, bonus
^C10 2
Hit ^C to add 5 to score, and print score, bonus
^C15 3
Hit ^C to add 5 to score, and print score, bonus
^C20 4
Hit ^C to add 5 to score, and print score, bonus
^C25 5
Hit ^C to add 5 to score, and print score, bonus
^C30 6
Hit ^C to add 5 to score, and print score, bonus
^C35 7
Hit ^C to add 5 to score, and print score, bonus
Hit ^C to add 5 to score, and print score, bonus
...
要将其添加到您的代码中,您只需在每次添加bonus = int(score/5)
后添加score
。