'Else if' için doğru sözdizimi nedir?


284

2.6.4'ten 3.1.1'e sıçrayan yeni bir Python programcısıyım. 'Else if' ifadesini kullanmaya çalışana kadar her şey yolunda gitti. Tercüman bana 'if' in 'else' ifadesinden sonra bir sözdizimi hatası veriyor.

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

function(input('input:'))

Muhtemelen çok basit bir şeyi özlüyorum; ancak cevabı kendi başıma bulamadım.


3
Bunun 2.6.4'te işe yaradığını sanmıyorum.
wRAR

Aslında, Python sözdizimi ve anlambiliminin bu unsuru bu versiyonlar arasında değişmemiştir. Muhtemelen asla.
Mike Graham

Yanıtlar:


444

Python "else if" yazılırsa "elif".
Ayrıca, elifve sonra bir kolon gerekirelse .

Basit bir soruya basit cevap. Aynı sorunu yaşadım, ilk başladığımda (son birkaç hafta içinde).

Kodunuz şöyle olmalıdır:

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

function(input('input:'))

11
Endişeye gerek yok, hepimiz bir zaman öğrenmek zorundayız. Python'un okunabilirliğe böylesine bir elphisise yerleştirmesi garip buluyorum ve sonra gidiyor ve başka yerine elkif kullanıyor. Python API kılavuzunu her zaman açık tutmanızı öneririm : docs.python.org/3.1 Önemli bağlantılar şunlardır: Öğretici: docs.python.org/3.1/tutorial/index.html Dil referansı: docs.python.org/3.1/reference /index.html Kütüphane referansı: docs.python.org/3.1/library/index.html
Lyndon White

1
Perl aynı anahtar kelimeyi kullanır ve bunun mantığı, başka bir deyim yazmayı bitirmeyi unuttuğunuz ve başka bir if deyimi yazmaya başladığınız kazaları önlemekti. Görünüşe göre bu C kodu yazarken yaygın bir sorundu.
Nate Glenn

1
@NateGlenn Perl aslında kullanır elsif, sanırım Python bir karakter daha verimli olması gerekiyordu. "Elif", #elifPython AFAICT'den çok önce kullanılan C ön işlemcisinden kaynaklanıyor gibi görünüyor . Ayrıştırma beri Açıkçası, tek jeton yönergesi sahip bu bağlamda, değerlidir #else if <code>vs #else <code that could theoretically even be an if statement>bataklık basit olması amaçlanmıştır bir sözdizimi karmaşık olurdu.
FeRD


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

10

eskiden beri if/else if, Python için doğru sözdizimi elif. Bu arada, if/else.eg bir sürü varsa sözlüğü kullanabilirsiniz

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

Msw için sözlük kullanarak işlevlerin yürütülmesi örneği.

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
Yapabilirsin, ama lütfen bunu yapma. Bir sözlük bir yerine geçmez elif.
S.Lott

@ s.lott, OP'nin durumu basit. A'nın birçok değerini kontrol etmek zorundaysa, sözlük daha temizdir. bunu kullanmak için bir alışkanlık yapabilir, ama ben bunu kullanıyorum ve ben / else birçok kodlama daha bu yaklaşımı seviyorum. heck, ben bile fonksiyonları yürütmek için sözlük kullanın.
ghostdog74

1
@ghostdog: Bunu bilmenizi edebilirsiniz işlevleri ancak bilgisayarlı gotos veya birlikte Tcl dizeleri yapıştırarak ve benzeri fikri korkutuyor beni yürütmek için sözlükleri kullanmak execonları ing. Bu iyi bir uygulama mı? Bir örnek verebilir misiniz?
msw

@msw: Çok iyi bir uygulama. Örnek: Basit bir kazıma egzersizi için değil, farklı eleman etiketleri için farklı işlemler yapmanız gereken bir XML akışı okuyorsunuz, örneğin Excel 2007 elektronik tablo dosyası, çok karmaşık olan birden fazla XML belgesinin bir zipidir. Her etiket için ayrı bir yönteminiz var. Bir sözlük aracılığıyla gönderiyorsunuz. Korkacak bir şey yok. İşleme yöntemi <foo>ise do_foo, uygulama başladığında dikteyi anında oluşturabilirsiniz.
John Machin

1
Sözlüğün .getvarsayılan bir değer belirtmenize izin veren bir yöntemi olduğunu unutmayın. İlk örneğiniz şu şekilde yazılabilirprint d.get(a, "3a")
codeape

4

İşte işlevinizi biraz yeniden düzenleme ("else" veya "elif" kullanmaz):

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

@ ghostdog74: Python 3, "yazdırma" için parantez gerektirir.


python 3, python 2'nin baskı ifadesini bir işlevle değiştirdi, böylece gerekli parantezleri aldıysanız ve eğer giderseniz sys.stdout.write
Dan D.

2
olması gerekir ('1', '2'), op dizeleri kullanıyor
priestc

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

Şu şekilde düzeltilmelidir:

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

Gördüğünüz gibi, elif olarak değiştirilmesi gerekiyorsa, '2'den sonra iki nokta üst üste olmalı ve başka, else ifadesinden sonra yeni bir satır olmalı ve baskı ile parantezler arasındaki boşluğu kapatmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.