我想在这里发生的事情是,如果我的列表中有1个,我希望我的代码得分为100分,如果有3个则为200分,如果有3个,则为200分少数情况下如果有4个,加1000分。但是我一直在遇到问题,其中一个问题就是我会得到一个甚至不是一个的数字,它会将它添加到我的得分1中,为什么会发生这种情况?例如,这是错误https://gyazo.com/c9b260c7a3306934faff074ab19efa68
之一from random import randint
score1 = 0
def dices():
score1 = 0
a = 0
score_total1 = 0
score_total2 = 0
dice1 = randint(1, 6)
dice2 = randint(1, 6)
dice3 = randint(1, 6)
dice4 = randint(1, 6)
dice5 = randint(1, 6)
dice6 = randint(1, 6)
rolled_dice = [dice1, dice2, dice3, dice4, dice5, dice6]
for number in rolled_dice:
if number == 1:
score_total1 += number
if score_total1 == 1:
score1 += 100
elif score_total1 == 2:
score1 += 200
elif score_total1 == 3:
score1 += 300
elif score_total1 == 4:
score1 += 1000
答案 0 :(得分:1)
你面临的问题不是你想象的那样。发生的情况是,当您的代码看到分数列表中的第一个1
时,它会将100
添加到分数中。然后它会看到另一个1
并为分数增加200。所以最终得分为300.并不是说你的代码认为列表中有3个1
。在这种情况下,我认为不需要循环遍历列表,因为list
具有内置的count
函数。
试试这个:
rolled_dice = [dice1, dice2, dice3, dice4, dice5, dice6]
one_count = rolled_dice.count(1)
return [0, 100, 200, 300, 1000][one_count]
虽然你应该有一个计划,如果你滚动超过4 1
s会发生什么。但我会把那部分留给你。
答案 1 :(得分:0)
如果您有兴趣计算列表中1的数量,可以更方便地使用列表推导:
n_ones = sum([num == 1 for num in rolled_dice])
然后,您可以决定如何根据分数来执行分数。因此,您可以想象以这种方式重构代码,而不是循环遍历rolled_dice。
至于获得在没有1的情况下分数增加的情况,它看起来不会发生这种情况。如果我们修改您的代码以包含return语句
def dices():
score1 = 0
a = 0
score_total1 = 0
score_total2 = 0
dice1 = randint(1, 6)
dice2 = randint(1, 6)
dice3 = randint(1, 6)
dice4 = randint(1, 6)
dice5 = randint(1, 6)
dice6 = randint(1, 6)
rolled_dice = [dice1, dice2, dice3, dice4, dice5, dice6]
for number in rolled_dice:
if number == 1:
score_total1 += number
if score_total1 == 1:
score1 += 100
elif score_total1 == 2:
score1 += 200
elif score_total1 == 3:
score1 += 300
elif score_total1 == 4:
score1 += 1000
return rolled_dice, score1
然后,以下代码永远不会打印任何内容
for i in range(1000):
rolled_dice, score1 = dices()
# Check if the score is nonzero when there is a 1 in rolled_dice
if not (1 in rolled_dice) and score != 0:
print(rolled_dice, score1)
表示所描述的情况从未发生过。