如果循环赢了我的if语句 - 为什么?

时间:2018-05-18 23:53:36

标签: python

我想在这里发生的事情是,如果我的列表中有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  

2 个答案:

答案 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)

表示所描述的情况从未发生过。