【问题标题】:Why is my if statement in Python evaluating to False?为什么我在 Python 中的 if 语句评估为 False?
【发布时间】:2014-09-20 20:19:11
【问题描述】:

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

LAST_NAME
FIRST_NAME
YEAR
POSITION
\n

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

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

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

【问题讨论】:

  • 因为line.strip() 永远不会等于"1"
  • 查看年份后需要进入下一行。现在,line.strip() 的两个调用都在 same 行上运行。
  • 您正在为所有包含姓名和职位的行打印Incorrect year!
  • @parsimoni,但是 for 循环不是遍历所有行并在每一行上运行 if 语句吗?
  • 是的,但在单个循环中,line 是同一个变量。 line 只有在整个循环体执行完毕后才会递增到下一行。

标签: python file loops if-statement


【解决方案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!")

【讨论】:

  • 没有什么比简单的代码重新排列更能让你感到愚蠢的了。谢谢,完美运行。 :P
  • 不知道你有没有看到,但我提交的第一个答案是错误的。我说在第一个 if 语句中放一个continue。不得不删除我的答案并重新考虑一下。我也觉得有点傻。 ;-)
猜你喜欢
  • 2021-05-15
  • 2015-04-16
  • 2014-05-11
  • 1970-01-01
  • 2015-12-07
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多