Apa sintaks yang benar untuk 'else if'?

284

Saya seorang programmer Python baru yang membuat lompatan dari 2.6.4 ke 3.1.1. Semuanya berjalan dengan baik sampai saya mencoba menggunakan pernyataan 'else if'. Penerjemah memberi saya kesalahan sintaks setelah 'jika' di 'lain jika' karena suatu alasan saya sepertinya tidak bisa mencari tahu.

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

function(input('input:'))

Saya mungkin melewatkan sesuatu yang sangat sederhana; Namun, saya belum dapat menemukan jawabannya sendiri.

Paul Turner
sumber
3
Saya tidak berpikir ini bekerja di 2.6.4.
wRAR
Memang, elemen sintaksis dan semantik Python ini tidak berubah di antara versi ini. Mungkin tidak pernah sama sekali.
Mike Graham
Anda bisa mulai dengan tutorial yang bagus tentang apakah / selain itu dengan
Triton Man

Jawaban:

444

Dalam python "else if" dieja "elif".
Juga, Anda memerlukan titik dua setelah elifdan else.

Jawaban sederhana untuk pertanyaan sederhana. Saya memiliki masalah yang sama, ketika saya mulai pertama (dalam beberapa minggu terakhir).

Jadi kode Anda harus dibaca:

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

function(input('input:'))
Lyndon White
sumber
11
jangan khawatir, kita semua harus belajar kapan-kapan. Saya merasa aneh bahwa python menempatkan elphisise pada keterbacaan dan kemudian pergi dan menggunakan elkif daripada yang lain itu. Saya menyarankan agar tetap membuka panduan API python setiap saat: docs.python.org/3.1 tautan penting adalah Tutorial: docs.python.org/3.1/tutorial/index.html Referensi bahasa: docs.python.org/3.1/reference /index.html Referensi
Lyndon White
1
Perl menggunakan kata kunci yang sama, dan alasannya adalah untuk mencegah kecelakaan di mana Anda lupa menyelesaikan penulisan pernyataan orang lain sebelumnya dan Anda mulai menulis pernyataan if lain. Rupanya itu masalah umum saat menulis kode C.
Nate Glenn
1
@NateGlenn Perl sebenarnya menggunakan elsif, saya kira Python harus satu karakter yang lebih efisien. "Elif" tampaknya berasal dari preprocessor C, yang digunakan #elifjauh sebelum Python AFAICT. Jelas, dalam konteks itu memiliki arahan token tunggal bernilai, karena parsing #else if <code>vs #else <code that could theoretically even be an if statement>akan mempersulit sintaks yang dimaksudkan untuk menjadi rawa-sederhana.
FeRD
20

Apakah yang Anda maksud elif?

Nick Presta
sumber
13
def function(a):
    if a == '1':
        print ('1a')
    elif a == '2':
        print ('2a')
    else:
        print ('3a')
Tom
sumber
10

sejak dahulu kala, sintaks yang benar untuk if/else ifdalam Python adalah elif. Omong-omong, Anda dapat menggunakan kamus jika Anda memiliki banyak if/else.eg

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

Untuk msw, contoh menjalankan fungsi menggunakan kamus.

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()
ghostdog74
sumber
1
Anda bisa, tapi tolong jangan lakukan ini. Kamus bukan pengganti yang baik untuk elif.
S.Lott
@ s.lott, kasing OP sederhana. Jika ia harus memeriksa banyak nilai a, kamus lebih rapi. Anda mungkin membuat kebiasaan untuk tidak menggunakannya, tetapi saya telah menggunakannya dan saya suka pendekatan ini lebih baik daripada pengkodean banyak jika / yang lain. heck, saya bahkan menggunakan kamus untuk menjalankan fungsi.
ghostdog74
1
@ ghostdog: Saya tahu bahwa Anda dapat menggunakan kamus untuk menjalankan fungsi tetapi gagasan itu membuat saya takut seperti gotos yang dihitung atau menempelkan string Tcl bersama-sama dan execmemasangnya. Apakah ini latihan yang bagus? Bisakah Anda memberi contoh?
msw
@ msw: Ini latihan yang sangat bagus. Contoh: Anda membaca aliran XML bukan untuk beberapa latihan menggores sederhana tetapi di mana Anda perlu melakukan pemrosesan berbeda untuk tag elemen yang berbeda misalnya file spreadsheet Excel 2007 adalah zip dari beberapa dokumen XML, beberapa sangat kompleks. Anda memiliki metode terpisah untuk setiap tag. Anda mengirim melalui kamus. Tidak ada yang perlu ditakutkan. Jika metode penanganannya <foo>adalah do_foo, Anda bahkan dapat membuat dict on the fly saat aplikasi dimulai.
John Machin
1
Perhatikan bahwa kamus memiliki .getmetode yang memungkinkan Anda menentukan nilai default. Contoh pertama Anda dapat ditulis sebagaiprint d.get(a, "3a")
codeape
4

Berikut adalah sedikit refactoring dari fungsi Anda (tidak menggunakan "lain" atau "elif"):

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

@ ghostdog74: Python 3 membutuhkan tanda kurung untuk "cetak".

Winston C. Yang
sumber
python 3 diganti pernyataan cetak python 2 dengan fungsi sehingga tanda kurung yang diperlukan, dan jika Anda akan sehingga Anda mungkin juga hanya menggunakan sys.stdout.write
Dan D.
2
seharusnya ('1', '2'), op menggunakan string
priestc
2
def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

Harus diperbaiki ke:

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

Seperti yang Anda lihat, kalau tidak diubah menjadi elif, harus ada titik dua setelah '2' dan yang lain, harus ada baris baru setelah pernyataan lain, dan tutup ruang antara cetakan dan tanda kurung.

MilkyWay90
sumber