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

2024-05-23 15:59:24 发布

您现在位置: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)

Tags: gamenumberinputifcountwinelseint
2条回答

重构你的代码有点好玩。这就是我想到的:

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)

我将做一个简化的用例来解释为什么你的代码不能像你想的那样工作。假设我们只想要1分。将count设置为0,并在循环之前读取第一个输入。所以你已经在循环开始之前接受了输入。此时,计数仍然设置为0。因此,开始循环count != 1。这将获取在循环外部收集的输入并添加到统计信息中。然后它将计数增加1,这样计数现在等于1。然后再次请求输入。第二个输入已经给出(即使您只需要一个匹配)。该输入存储在x中,循环的第一次迭代结束。循环条件count!=1现在被破坏,因此循环在1次迭代后完成。所以分配给x的第二个输入永远不会添加到stats中。这是正确的行为。问题是你的代码结构意味着你会要求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

相关问题 更多 >