2016-11-09 133 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