2016-11-09 149 views
1

我每次運行此代碼時都會收到語法錯誤。我不明白爲什麼我的腳本中的其他地方,我使用相同的結構,它工作正常。Python中elif語句的語法錯誤...?

我得到了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

您的縮進是錯誤的......我懷疑'elif'之前的3行代碼需要縮進。或者整個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) 

您可以更換新的換行符(該\ n)和所有需要的第一行下面的代碼來縮進多個打印語句。另外,由於下面這些行,elif破了:

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

乾杯!是。下面的行不正確的順序。快速休息之後,我設法讓所有事情順利進行。感謝多個print()語句的提示。 – Seanosapien