2014-09-20 107 views
1

我的任务是让用户输入一年,并使用该输入在文本文件中一行一行地搜索奥运选手当年赢得的金牌总数。该文本文件包含成千上万的排序是这样的条目:为什么我在Python中的if语句评估为False?

LAST_NAME 
FIRST_NAME 
YEAR 
POSITION 
\n 

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

检查年份的工作,但它永远不会找到黄金,而是每次都显示这个: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 
+0

因为'line.strip()'永远不会等于'“1”'。 – 2014-09-20 20:24:09

+0

您需要在查看年份后进入下一行。现在,''line.strip()''调用都在_same_行上。 – rmccloskey 2014-09-20 20:24:14

+0

您正在为所有包含名称和位置的行打印“年份不正确!”。 – Barmar 2014-09-20 20:24:58

回答

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!") 
+0

没有什么让你觉得像简单的代码重排那样愚蠢。谢谢,完美的作品。 :P – HEATH3N 2014-09-20 21:00:28

+0

我不知道你是否看到了,但我提交的第一个答案是错误的。我说只在第一个陈述中加上一个“继续”。必须删除我的答案并重新考虑一下。我也觉得有点愚蠢。 ;-) – 2014-09-20 21:01:44

相关问题