2011-08-11 5 views
15

で働いていない私は、Pythonの初心者だと、現在の制御フローを学ぶことがifなどのコマンド、elseなど他&elifのステートメントは、Python

if文はすべて正常に動作しますが、ときに私はelseまたはelifを書き込みされコマンドを実行すると、インタープリタは私に構文エラーを与えます。私はPython 3.2.1を使用していますが、問題はネイティブインタプリタとIDLEの両方で発生しています。

私はそれが本の中で与えられている通りに従っています'A Byte Of Python'です。ご覧のとおり、elifelse無効な構文です。

>> number=23 
>> guess = input('Enter a number : ') 
>> if guess == number: 
>> print('Congratulations! You guessed it.') 
>> elif guess < number: 
    **(It is giving me 'Invalid Syntax')** 
>> else: 
    **(It is also giving me 'Invalid syntax')** 

どうしてですか? IDLEと対話的なPythonの両方で問題が発生しています。私は構文が正しいことを願っています。

enter image description here

+0

構文が正しいと思われます。これをインタラクティブなPythonシェルで入力していますか?これはファイルに保存されていますか?変更されていないスクリプトまたはインタラクティブセッションのトランスクリプトを貼り付けることはできますか? – cdhowie

+0

elif/elseは空ですか?場合は、それに 'パス'を追加してください。 – Jacob

+0

REPLセッションの*実際の*フル出力を貼り付けることはできますか?実際の出力を「**(無効な構文が与えられています)」**のようなものに置き換えないと、人々はあなたの問題を見やすくなります** " –

答えて

21

ifステートメントの本文の後ろに空白行を入力しているようです。これはインタラクティブコンパイラにとってはブロック全体で完了しているため、elif/elseブロックは期待していません。まさにこのようなコードを入力してみてください、とだけ各行の後たらを入力してくださいヒット:

if guess == number: 
    print('Congratulations! You guessed it.') 
elif guess < number: 
    pass # Your code here 
else: 
    pass # Your code here 
+2

ありがとう!それは私の問題を解決しました。 :)あなたが言っていることは私の本には載っていませんでした。そのようなテストのために – jayantr7

+3

、それは 'python mytest.py'で実行するテキストファイルにすべてを書く方が簡単です – Simon

+0

@ jayantr7:問題ありません。これをファイルに入力してPythonで実行すると(サイモンが示唆しているように)、余分な改行に問題はありません。これはインタラクティブなインタプリタに固有の問題です。 – cdhowie

1
if guess == number: 
    print ("Good") 
elif guess == 2: 
    print ("Bad") 
else: 
    print ("Also bad") 

あなたのインデントの権利を持っていることを確認してください。構文はokです。

2

elifelseすぐifブロックの終わりに従わなければならない、またはPythonは、ブロックがそれらなしで閉じられていることを前提とします。あなたのコードで

if 1: 
    pass 
      <--- this line must be indented at the same level as the `pass` 
else: 
    pass 

、インタプリタは時にインデントifブロックを終了し、そうelifelseは、それに関連付けられていません。したがって、それらは独立したステートメントとして理解されていますが、これは意味をなさないものです。


一般に、余分な空白を削除することを含むstyle guidelinesに従ってください。

3

問題は、あなたがelseまたはelif前に入力している空白行です。あなたが与えられたプロンプトに注意を払う。 >>>の場合、Pythonは新しいステートメントの開始を期待しています。 ...の場合は、前のステートメントを続行することを期待しています。

2

IDLEと対話型のPythonでは、if文から2つの連続するCRLFを入力しました。 IDLEまたは対話的なPythonの問題です。どんな種類のエディタを使っても構いませんが、インデントが正しいことを確認してください。

0

あなたのインデントは間違っています。コードは動作しません。 私はあなたがpython 3.何かを使用している知っている。 私はPython 2.7.3 を使用していますが、これはあなたが達成しようとしているもので実際に動作するコードです。

number = str(23) 
guess = input('Enter a number: ') 
if guess == number: 
    print('Congratulations! You guessed it.') 
elif guess < number: 
    print('Wrong Number') 
elif guess < number: 
    print("Wrong Number') 

唯一の違いは、私はPythonにそのコードが動作するための文字列であると言っています。考えていない場合は、整数です。誰かがコードを実行すると、整数ではない文字列が入力されます。このコードを変更するには多くの方法がありますが、これは私が提供したい簡単な解決策です。23を文字列にすることなく私が考えることができない別の方法があります。あるいは、 "23"で引用符を付けることもできますし、入力内でint()関数を使用することもできます。それは入力したものを整数に変換します。

0

デフォルトでは、入力からの戻り値は整数ではなく文字列になります。 <、>、=>、< =(長さを比較しない限り)などのブール値と文字列を比較することはできません。したがって、あなたのコードは次のようになります。

number = 23 
guess = int(input('Enter a number: ')) # The var guess will be an integer 

if guess == number: 
    print('Congratulations! You guessed it.') 

elif guess != number: 
    print('Wrong Number') 
0

Pythonはidentのは「elifの」ブロックは「が」ブロックのidentに一致しない場合でも、同じ「無効な構文」エラーを生成することができます(第2の最初の、空白のタブまたは逆に)。

関連する問題