为什么Python中的if语句评估为False?

时间:2014-09-20 20:19:12

标签: python file loops if-statement

我的任务是让用户输入一年并使用该输入在文本文件中逐行搜索奥林匹克运动员当年赢得的金牌总数。该文本文件包含数千个条目,如下所示:

LAST_NAME
FIRST_NAME
YEAR
POSITION
\n

我认为这样做的方法是确保年份匹配,如果匹配,则将名为blockIsValid的变量的值设置为True。然后该程序将检查该块是否有效(以避免考虑其他年份的金牌),如果是,则通过寻找一个(位置,表示金币)来检查金牌。将金牌记录在变量blockIsValid中后,False会重置为goldMedals

检查年份部分有效,但它从未找到黄金,而是每次都显示:enter image description here [注意]我们应该检查每一行,这就是为什么有一堆行说“不正确的一年!“

def findAnnualMedals(year):
    blockIsValid = None
    goldMedals = 0
    file = open('athletes.txt', encoding='utf-8')
    for currentLine, line in enumerate(file):
        if line.strip() == year:
            print("Correct year!")
            blockIsValid = True
        else:
            print("Incorrect year!")
            blockIsValid = False


        if blockIsValid == True:
            if line.strip() == "1":
                print("Gold!")
                goldMedals += 1

            else:
                print("Not gold!")
            blockIsValid = False

1 个答案:

答案 0 :(得分:1)

如果稍微重新排列逻辑,这将更容易。将金牌支票放在年度支票前面的顶部。

foundYear = False

for currentLine, line in enumerate(file):
    if foundYear:
        if line.strip() == "1":
            print("Gold!")
            goldMedals += 1

        else:
            print("Not gold!")

        foundYear = False

    elif line.strip() == year:
        print("Correct year!")
        foundYear = True

    else:
        print("Incorrect year!")