为什么我的程序不计算最后一场比赛的得分?

时间:2019-08-16 10:47:14

标签: python

我想输入30场足球比赛的得分,并计算获胜比赛的次数和总得分。我有30个输入,但它不计算最后一个匹配项(第30个匹配项)。我该怎么办?

scores=0
win_number=0
game_number=0
x=int(input())
count=0
while count!=30 :
    if x==3:
        scores=scores+3
        win_number=win_number+1
        game_number=game_number+1
        count=count+1
        x=int(input())
    elif x==1:
        scores=scores+1
        win_number=win_number+1
        x=int(input())
        count=count+1
    elif x==0:
        game_number=game_number+1
        count=count+1
        x=int(input())
else :
    print(scores,'',win_number,game_number)

2 个答案:

答案 0 :(得分:1)

我将做一个简化的用例来解释为什么您的代码无法按照您的想法工作。想象一下,我们只想要1分。您将count设置为0,并在循环之前读取第一个输入。因此,您已在循环开始之前获取了输入。此时,计数仍设置为0。因此,开始循环count != 1。这会将您收集的输入带到循环外部,并添加到统计信息中。然后,它将计数加1,因此计数现在等于1。然后,您再次要求输入。这是第二个输入(即使您只想要1个匹配项)。此输入存储在x中,循环的第一次迭代结束。循环条件count!=1现在已断开,因此循环在1次迭代后结束。因此分配给x的第二个输入永远不会添加到统计信息中。这是正确的行为。问题是您的代码结构意味着您将要求再输入1个输入,但从不计算最后一个输入,仍然获得30个匹配项

相反,您可以使用范围来生成X次迭代。您的代码也可以清理,因为每个if语句中都有很多行,可以将这些行从if中删除,然后在循环中只编写一次。

scores=0
win_number = 0
game_number = 0
for _ in range(3):
    x = int(input('score: '))
    scores += x
    if x == 3 or x == 1:
        win_number=win_number+1
    if x == 3 or x == 0:
        game_number += 1

print(scores,win_number,game_number)

控制台

score: 3
score: 1
score: 0
4 2 2

答案 1 :(得分:1)

重构代码有点有趣。这是我想出的:

count = 0
scores = 0
win_number = 0
game_number = 0

while count < 30:
    x = int(input())
    if x not in [0, 1, 3]:
        print("Wrong input - enter either 0, 1 or 3")
        continue
    scores += x
    count += 1
    game_number += 1

    if x == 3 or x == 1: # is x == 1 really a win, though?
        win_number = win_number+1

    print(scores,'',win_number,game_number)