「else if」の正しい構文は何ですか?


284

私は2.6.4から3.1.1に飛躍している新しいPythonプログラマーです。「else if」ステートメントを使用するまで、すべてがうまくいきました。インタプリタは、私が理解できない理由のために、「else if」の「if」の後に構文エラーを表示します。

def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

function(input('input:'))

おそらく非常に単純なものが足りないでしょう。しかし、私は自分で答えを見つけることができませんでした。


3
これは2.6.4では機能しないと思います。
wRAR 2010年

実際、Pythonの構文とセマンティクスのこの要素は、これらのバージョン間で変更されていません。おそらくまったくない。
マイクグラハム

Pythonのif / elseに関する優れたチュートリアルから始めることができます。dreamsyssoft.com
Triton Man

回答:


444

Pythonでは、「else if」は「elif」とつづられます。
また、あなたが後にコロン必要elifelse

簡単な質問に対する簡単な答え。私が最初に始めたとき(最後の数週間)にも同じ問題がありました。

したがって、コードは次のようになります。

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

function(input('input:'))

11
心配する必要はありません。Pythonがそのようなエルフィシスを読みやすさに置き、elkifを他の代わりに使用するのは奇妙です。常にpython APIマニュアルを開いたままにしておくことをお勧めします:docs.python.org/3.1重要なリンクはチュートリアルです:docs.python.org/3.1/tutorial/index.html言語リファレンス:docs.python.org/3.1/reference /index.htmlライブラリ参照:docs.python.org/3.1/library/index.html
Lyndon White

1
Perlは同じキーワードを使用しますが、その理由は、前のelseステートメントの作成を忘れて、別のifステートメントの作成を開始する事故を防ぐためです。どうやらそれはCコードを書くときによくある問題でした。
Nate Glenn、

1
@NateGlenn Perlは実際にを使用していますがelsif、Pythonはその1文字をより効率的にする必要があったと思います。「Elif」は、#elifPython AFAICTよりもずっと前に使用されていたCプリプロセッサに由来しているようです。解析するので、明らかに、単一のトークンディレクティブを持っている状況では、価値がある#else if <code>対は#else <code that could theoretically even be an if statement>沼地、シンプルであることを意図していた構文を複雑にしただろう。
FeRD 2018年


13
def function(a):
    if a == '1':
        print ('1a')
    elif a == '2':
        print ('2a')
    else:
        print ('3a')

10

昔からif/else if、Python での正しい構文はelifです。ちなみに、if/else.eg がたくさんある場合は、辞書を使用できます。

d={"1":"1a","2":"2a"}
if not a in d: print("3a")
else: print (d[a])

mswの場合、辞書を使用して関数を実行する例。

def print_one(arg=None):
    print "one"

def print_two(num):
    print "two %s" % num

execfunctions = { 1 : (print_one, ['**arg'] ) , 2 : (print_two , ['**arg'] )}
try:
    execfunctions[1][0]()
except KeyError,e:
    print "Invalid option: ",e

try:
    execfunctions[2][0]("test")
except KeyError,e:
    print "Invalid option: ",e
else:
    sys.exit()

1
できますが、これは行わないでください。辞書はの良い代替品ではありませんelif
S.Lott、

@ s.lott、OPのケースは簡単です。彼がaの多くの値をチェックする必要がある場合、辞書はきちんとしています。あなたはそれを使わない習慣にするかもしれませんが、私はそれを使ってきました、そして私は多くのif / elseをコーディングするよりもこのアプローチが好きです。えっと、私は関数を実行するために辞書を使います。
ghostdog74

1
@ghostdog:辞書を使用して関数を実行できることは知っていますが、計算されたgotoやTcl文字列を貼り付けてexecingするように、このアイデアは私を怖がらせます。これは良い習慣ですか?例を挙げることができますか?
msw 2010年

@msw:とても良い習慣です。例:単純なスクレイピングではなく、さまざまな要素タグに対して異なる処理を行う必要のあるXMLストリームを読み取っている場合。たとえば、Excel 2007スプレッドシートファイルは、非常に複雑な複数のXMLドキュメントのzipです。タグごとに個別のメソッドがあります。辞書経由で発送します。怖がることはありません。取扱い方法は場合<foo>do_fooアプリが起動したとき、あなたもその場で辞書を構築することができます。
John Machin

1
辞書には.getデフォルト値を指定できるメソッドがあることに注意してください。最初の例は次のように書くことができますprint d.get(a, "3a")
codeape 2013年

4

関数のリファクタリングを以下に示します(「else」または「elif」は使用しません)。

def function(a):
    if a not in (1, 2):
        a = 3
    print(str(a) + "a")

@ ghostdog74:Python 3では「印刷」に括弧が必要です。


python 3はpython 2のprintステートメントを関数に置き換えたため、必要な括弧が使用され、sys.stdout.writeを使用することもできます
Dan D.

2
('1', '2')opは文字列を使用している必要があります
priestc

2
def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

次のように修正する必要があります。

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

ご覧のとおり、else ifをelifに変更する必要があります。'2 'の後にコロンがあり、elseステートメントの後に改行があり、printと括弧の間のスペースを閉じる必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.