2014-09-20 2 views
1

Моя задача - вводить пользователя в год и использовать этот ввод для поиска по очереди в текстовом файле для общего количества золотых медалей, выигранных в этом году спортсменами-олимпийцами. Текстовый файл содержит тысячи записей, отсортированных как это:Почему моя инструкция if в Python оценивает значение False?

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 
+0

Потому что 'line.strip()' никогда не равен '" 1 "'. –

+0

Вам нужно перейти к следующей строке после проверки на год. Прямо сейчас, '' вызовы '' line.strip() '' действуют на строку _same_. – rmccloskey

+0

Вы печатаете 'Неверный год! 'Для всех строк, содержащих имена и позиции. – Barmar

ответ

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

+0

Я не знаю, видел ли вы, но первый ответ, который я представил, был неправильным. Я сказал просто положить 'continue' в первый оператор if. Должен был удалить мой ответ и немного переосмыслить его. Я тоже был немного глуп. ;-) –

Смежные вопросы