2016-11-09 134 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'ステートメントに接続されていないようです。多分あなたはそれの前に3行をインデントすることを意味しましたか? – user3030010

+0

私は質問を投稿した後、文字通りそれを理解しました。初心者のエラー。皆さんありがとう。 – Seanosapien

答えて

2

elifブロックは、上記ifブロックとして、垂直に、同じ位置になければなりません。つまり、elifのコードは、elifを含めてすべて1つ左に移動する必要があります。

+0

ありがとうございます。私はこのプログラムを2日間書いています。 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):") 

あなたがあればそれらを最初に下になりたい場合は、これらの行は1つの以上のレベルインデントする必要があります。

実行時は "elif"の代わりに "if"、またはインデント権が1つである必要がある場合はpreviousに属したい場合は、実行中は前のスコープから外れて解釈されます。

+0

ありがとう@マキ。ソート済み。 – 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) 

あなたは新しい改行で複数のprint文(\ n)でとインデントするために必要な最初の行の下のすべてのコードを置き換えることができます。また、elifのが原因でラインの破壊された:

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

乾杯!はい。下の行は正しい順序ではありません。私はすばやく休憩した後、すべてがスムーズに動くように管理しました。複数のprint()ステートメントのヒントをありがとう。 – Seanosapien