2016-11-09 4 views
1

Я получаю синтаксическую ошибку каждый раз, когда запускаю этот код. Я не понимаю, почему, как и везде в моем сценарии, я использую ту же структуру, и она отлично работает.Синтаксические ошибки для оператора elif в Python ...?

Я получаю синтаксическую ошибку для области elif == 2: сначала. Затем я получаю загрузку ошибок отступов. Я играл с углублениями безрезультатно. Здесь надеются, что кто-то сможет определить проблему.

Заранее спасибо.

def main(): 

back2main = "y" 

while back2main == "y": 

    print("Main Menu");print("1.)Highest Rainfall in one Day");print("2.)Wettest Location in Ireland");print("3.)Average Monthly Raindays");print("4.)[Construct Unique Query]");print("5.)Exit") 
    choice = input("Please select one of options 1:5 above:") 

    if choice == 1: 

     print("1.)Cork");print("2.)Belfast");print("3.)Dublin");print("4.)Galway");print("5.)Limerick") 
     region = input("Please enter a city from the numbered list above:") 

     if region == 1: 

      corkRain = open("CorkRainfall.txt","r") 

      highestRain = 0.0 

      for line in corkRain: 
       data = line.split(" ") 
       if float(data[3]) > highestRain: 
        highestRain = float(data[3]) 

     print("Highest rainfall in a single day for Cork: " + str(highestRain) + " mm") 

     corkRain.close() 

     back2main = raw_input("Return to Main Menu? (y/n):") 

     elif region == 2: 

      belfastRain = open("BelfastRainfall.txt","r") 

      highestRain = 0.0 

      for line in belfastRain: 
       data = line.split(" ") 
       if float(data[3]) > highestRain: 
        highestRain = float(data[3]) 

     print("Highest rainfall in a single day in Belfast: ") + str(highestRain) 
+1

Отпечаток неправильный ... Я подозреваю, что 3 строки кода до того, как 'elif' необходимо отступом. Или весь блок 'elif' нужно отделить. – AChampion

+1

Ваш оператор 'elif', похоже, не связан с какой-либо операцией' if'. Может быть, вы хотели отступать до трех строк? – user3030010

+0

Я буквально просто понял это после того, как я разместил вопрос. Ошибка новичка. Спасибо всем. – Seanosapien

ответ

2

elif блок должен быть на том же самом положении, в вертикальном положении, как if блока над ним. Это означает, что весь код под elif, включая elif, должен быть перемещен одной вкладкой влево.

+0

Спасибо. Я пишу эту программу два дня. У 600+ линий глаза были странными. Время для чайного перерыва. – Seanosapien

+0

Вы привыкаете к подобным вещам и замечаете их немедленно, через некоторое время. – yper

+0

Еще раз спасибо @yper. – Seanosapien

2

Ваша проблема здесь:

print("Highest rainfall in a single day for Cork: " + str(highestRain) + " mm") 
corkRain.close() 
back2main = raw_input("Return to Main Menu? (y/n):") 

Эти линии должны быть еще один уровень отступа, если вы хотите, чтобы они были под первым, если.

Выполнение интерпретируется как исключение из предыдущей области видимости, а также следующее: «if» вместо «elif» или если вы хотите принадлежать предыдущему, если это должно быть одно право отступа.

+0

Спасибо @maki. Критерий сортировки. – Seanosapien

2

Я рекомендовал бы попробовать это:

def main(): 

    back2main = "y" 

    while back2main == "y": 

     print("Main Menu\n1.)Highest Rainfall in one Day\n2.)Wettest Location in Ireland\n3.)Average Monthly Raindays\n4.)[Construct Unique Query]\n5.)Exit") 
     choice = input("Please select one of options 1:5 above:") 

     if choice == 1: 

      print("1.)Cork\n2.)Belfast\n3.)Dublin\n4.)Galway\n5.)Limerick") 
      region = input("Please enter a city from the numbered list above:") 

      if region == 1: 

       corkRain = open("CorkRainfall.txt","r") 

       highestRain = 0.0 

       for line in corkRain: 
        data = line.split(" ") 
        if float(data[3]) > highestRain: 
         highestRain = float(data[3]) 



      elif region == 2: 

       belfastRain = open("BelfastRainfall.txt","r") 

       highestRain = 0.0 

       for line in belfastRain: 
        data = line.split(" ") 
        if float(data[3]) > highestRain: 
         highestRain = float(data[3]) 

      print("Highest rainfall in a single day for Cork: " + str(highestRain) + " mm") 

      corkRain.close() 

      back2main = raw_input("Return to Main Menu? (y/n):") 

      print("Highest rainfall in a single day in Belfast: ") + str(highestRain) 

Вы можете заменить несколько операторов печати с новыми перерывами линии (\ п) и весь код ниже первой линии, необходимой для отступа. Кроме того, elif ломался из-за линий:

print("highest rainfall... 
corkRain.close() 
back 2main = ... 
+0

Приветствия! Да. Строки ниже приведены не в правильном порядке. После быстрого перерыва мне удалось добиться бесперебойной работы. Спасибо за подсказку в операторах multiple print(). – Seanosapien

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