2014-09-20 106 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

相關問題