ไวยากรณ์ที่ถูกต้องสำหรับ 'else if' คืออะไร?


284

ฉันเป็นโปรแกรมเมอร์ Python คนใหม่ที่กระโดดจาก 2.6.4 เป็น 3.1.1 ทุกอย่างไปได้ดีจนกระทั่งฉันพยายามใช้คำสั่ง 'else 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

แท้จริงแล้วองค์ประกอบของไวยากรณ์ Python และซีแมนทิกส์ไม่ได้เปลี่ยนแปลงระหว่างเวอร์ชันเหล่านี้ อาจไม่เคยเลย
Mike Graham

คุณสามารถเริ่มต้นด้วยการสอนที่ดีถ้า / อื่น ๆ ในหลาม: dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php
ผู้ชาย Triton

คำตอบ:


444

ในภาษาไพ ธ อน "else ถ้า" สะกด "elif"
นอกจากนี้คุณต้องลำไส้ใหญ่หลังจากที่และelifelse

คำตอบง่ายๆสำหรับคำถามง่าย ๆ ฉันมีปัญหาเดียวกันเมื่อฉันเริ่มครั้งแรก (ในสองสามสัปดาห์ที่ผ่านมา)

ดังนั้นรหัสของคุณควรอ่าน:

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

function(input('input:'))

11
ไม่ต้องกังวลเราทุกคนต้องเรียนรู้บ้าง ฉันคิดว่ามันแปลกที่ไพ ธ อนวางเอลฟิสไว้ใน readbility จากนั้นไปและใช้ 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 ใช้คำหลักเดียวกันและเหตุผลก็เพื่อป้องกันอุบัติเหตุที่คุณลืมเขียนคำสั่งก่อนหน้านี้ให้เสร็จและคุณจะเริ่มเขียนอีกครั้งถ้าคำสั่ง เห็นได้ชัดว่าเป็นปัญหาที่พบบ่อยในขณะที่เขียนรหัส C
Nate Glenn

1
@NateGlenn Perl ใช้จริงelsifฉันเดาว่า Python ต้องเป็นตัวละครตัวหนึ่งที่มีประสิทธิภาพมากกว่า "Elif" ดูเหมือนว่ามีต้นกำเนิดมาจากตัวประมวลผลล่วงหน้า C ซึ่งใช้#elifงานมานานก่อนที่ Python AFAICT เห็นได้ชัดว่าในบริบทนั้นมีคำสั่งโทเค็นเดียวมีค่าตั้งแต่การแยก#else if <code>กับ vs. #else <code that could theoretically even be an if statement>จะซับซ้อนไวยากรณ์ที่ตั้งใจจะง่าย
FeRD



10

ตั้งแต่สมัยโบราณไวยากรณ์ที่ถูกต้องสำหรับในหลามเป็นif/else if elifโดยวิธีการที่คุณสามารถใช้พจนานุกรมถ้าคุณมีมาก. if/elseeeg

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 พจนานุกรมจะเป็น neater คุณอาจทำให้มันเป็นนิสัยที่จะไม่ใช้ แต่ฉันได้ใช้มันและฉันชอบวิธีนี้ดีกว่าการเข้ารหัสจำนวนมากถ้า / อื่น ๆ heck ฉันยังใช้พจนานุกรมเพื่อเรียกใช้ฟังก์ชัน
ghostdog74

1
@ghostdog: ฉันรู้ว่าคุณสามารถใช้พจนานุกรมเพื่อดำเนินการฟังก์ชั่น แต่ความคิดกลัวฉันเหมือน gotos คำนวณหรือวางสาย Tcl ร่วมกันและexecไอเอ็นจีพวกเขา นี่เป็นวิธีที่ดีหรือไม่? คุณสามารถตั้งชื่อตัวอย่างได้ไหม?
msw

@msw: เป็นวิธีปฏิบัติที่ดีมาก ตัวอย่าง: คุณกำลังอ่านกระแส XML ไม่ได้สำหรับการออกกำลังกายบางอย่างง่ายขูด แต่อย่างหนึ่งที่คุณต้องทำในการประมวลผลที่แตกต่างกันสำหรับแท็กองค์ประกอบที่แตกต่างกันเช่น 2007 แฟ้มกระดาษคำนวณ Excel เป็นซิปของเอกสาร XML หลายบางที่ซับซ้อนมาก คุณมีวิธีแยกต่างหากสำหรับแต่ละแท็ก คุณส่งผ่านพจนานุกรม ไม่มีอะไรน่ากลัว หากวิธีการจัดการ<foo>คือdo_fooคุณสามารถสร้าง dict ได้ทันทีเมื่อแอปเริ่มทำงาน
John Machin

1
โปรดทราบว่าพจนานุกรมมี.getวิธีการที่ให้คุณระบุค่าเริ่มต้น ตัวอย่างแรกของคุณสามารถเขียนเป็นprint d.get(a, "3a")
codeape

4

นี่คือการปรับปรุงการทำงานของคุณเล็กน้อย (ไม่ใช้ "else" หรือ "elif"):

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

@ ghostdog74: Python 3 ต้องการวงเล็บสำหรับ "print"


python 3 แทนที่คำสั่งการพิมพ์ของ python 2 ด้วยฟังก์ชันดังนั้นวงเล็บที่จำเป็นและถ้าคุณจะทำเช่นนั้นคุณอาจใช้ sys.stdout.write แทน
D. D.

2
ควรเป็น('1', '2'), op กำลังใช้สตริง
นักบวช

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')

อย่างที่คุณเห็นถ้าไม่ควรเปลี่ยนเป็น elif ควรมี colons หลัง '2' และอื่นควรมีบรรทัดใหม่หลังคำสั่ง else และปิดช่องว่างระหว่างการพิมพ์และวงเล็บ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.