การเขียนโปรแกรมที่ทำงานตั้งแต่บนลงล่างนั้นดูจะธรรมดาเกินไปสำหรับปัญหายากๆ แต่ก็เป็นไปได้สำหรับงานที่ไม่ซับซ้อน การออกแบบด้วยวิธี top-down เป็นกรรมวิธีอย่างหนึ่งเพื่อให้โปรแกรมที่ได้ไม่ซับซ้อน และมันทำงานแบบบนลงล่าง อย่างไรก็ตามในที่สุดแล้วโปรแกรมมักซับซ้อนเกินกว่าที่จะทำแบบบนลงล่างทั้งหมดได้ เมื่อโปรแกรมมีความซับซ้อนจึงต้องมีคำสั่งพิเศษสำหรับควบคุมการทำงาน หรือ Control Flow คำสั่งประเภทนี้ใน ไพธอน จะถือเป็นคำสั่งเฉพาะ แบ่งเป็น 2 ประเภทหลักๆ ได้แก่
คำสั่งเงื่อนไข (Condition) ใน ไพธอน มีเพียงรูปแบบเดียวเท่านั้น แต่ก็เพียงพอสำหรับงานทุกประเภท ประยุกต์ได้หลากหลายมาก มาเข้าเรื่องกันดีกว่า คำสั่งเงื่อนไขนี้จะมีส่วนประกอบ 3 ส่วน ได้แก่
เมื่อนำมารวมกันจะอยู่ในรูปแบบด้านล่าง
if expression: statement1 statement2
จะสังเกตุเห็นว่าคำสั่งภายใต้ if นั้นจะเว้นระยะด้านหน้าไว้ นี่คือลักษณะพิเศษของ ไพธอน ที่น่าสนใจ และมีประสิทธิภาพมากอย่างไม่น่าเชื่อ ถ้าดูให้ดีกว่านั้น สำหรับผู้ที่เคยเขียนโปรแกรมมาก่อนจะสงสัยเป็นอย่างยิ่งว่า begin end endif หรือ { } หายไปไหน เพราะภาษาทั่วไป เช่น C C# Pascal Java Basic หรือ แม้แต่ PHP นั้นจะมีคำสั่ง if นี้และจะถือว่า คำสั่งภายใต้ if มีได้เพียงคำสั่งเดียวเท่านั้น ถ้ามีหลายคำสั่งต้องครอบคำสั่งเหล่านั้นด้วย { } หรือ end หรือ endif หรืออะไรบางอย่างที่ทำให้คำสั่งหลายคำสั่งเสมือนเป็นคำสั่งเดียว แต่ใน ไพธอน จะมีหลักการที่ต่างกันไป นั่นคือการจับกลุ่มชุดคำสั่งจะไม่มีคำสั่งหรือสัญลักษณ์พิเศษใดๆ แต่จะใช้เพียงการย่อหน้า หรือ Indent นั่นเอง ดังตัวอย่างข้างบน ใช้การย่อหน้าเข้ามา 4 ตัวอักษร แปลว่า statement1 และ statement2 อยู่ในระดับเดียวกันผ่านใต้ if อย่างไรก็ตาม ไพธอน ยังให้ใช้เครื่องหมาย : colon เพื่อบอกจุดจบของคำสั่งที่มีคำสั่งย่อยต่อไป เช่น if เป็นต้น การใช้ if จะเป็นดังตัวอย่างต่อไปนี้
a = 10 b = 20 if a > b: print a,’ >’,b
ในกรณีที่มีคำสั่งที่รองรับเงื่อนไขและนอกเงื่อนไข เราสามารถใช้คำสั่ง else เพื่อบ่งบอกคำสั่งเพิ่มเติมได้ ดังตัวอย่างถัดไป
if a > b: print a,’>’,b else: print a,’<=’,b
นอกจากนี้ยังมีคำสั่งพิเศษใช้ในกรณีที่มีเงื่อนไขต่อกันหลายเงื่อนไข นั่นคือ elif นั่นเอง ความจริงแล้ว elif มีการทำงานไม่ต่างกับ else if แบบปกติเท่าใดนัก สามารถเลือกใช้ตามถนัดได้
if a > b: print a,’>’,b elif a < b: print a,’<’,b else: print a,’=’,b
สำหรับเงื่อนไขที่ซับซ้อนสามารถใช้ and or not มาเชื่อมได้ตามจำเป็น เช่น
if a > b or a < b: print a,’!=’,b
สัญลักษณ์การเปรียบเทียบใน ไพธอน จะเหมือนปกติทั่วไป เช่น < > <= >= จะแปลกไปก็คือการเปรียบเทียบ เท่ากับ == และ ไม่เท่ากับ != เท่านั้นเอง
ลูป (Loop) เป็นสิ่งที่จำเป็น และทรงพลังที่สุดของการแก้ปัญหาด้วยการเขียนโปรแกรมบนคอมพิวเตอร์ เพราะมันช่วยย่นระยะเวลาของการทำงานได้ไม่จำกัด โดยทั่วไปเกือบทุกภาษาจะมีคำสั่งประเภท ลูป อยู่เป็นจำนวนมาก เพื่อให้เลือกใช้งานได้หลายกรณี แต่สำหรับ ไพธอน ไม่มี เพราะลูป เหล่านี้มักเป็นต้นเหตุของข้อผิดพลาดจากการเขียนโปรแกรม เขียนแล้วมึน เขียนแล้วงง นานเข้าก็ไม่เข้าใจ เนื่องจากคำสั่ง ลูป ที่เขียนนั้นซับซ้อนเกินไปนั่นเอง สรุปแล้ว ไพธอน มีลูปเพียง 2 แบบเท่านั้น ไม่มีมากกว่านี้เด็ดขาด ได้แก่
ถ้าเคยเขียนภาษาอื่นมา for กับ while ก็ดูจะปกติดี ภาษาอื่นมีหมด แล้วอะไรขาดไปกันแน่ สิ่งที่ขาดไปคือรูปแบบการใช้ ไม่ใช่คำสั่งครับ ยกตัวอย่างเช่น C C# และ Java สามารถเขียน for ได้สารพัดแบบ ทำให้ for กลายเป็นสิ่งมหัศจรรย์ ทำทุกอย่างได้ด้วย for แล้วก็งงกันไปหลายตลบ ส่วนใน ไพธอน มีวิธีใช้ for แบบเดียวเท่านั้นครับ for จะต้องอยู่ในรูปแบบดังนี้
for i in lists: statement1 statement2
ก่อนอื่นจะเห็นว่าคล้ายคล้าย if ครับ มี colon : เพื่อบอกจุดจบของคำสั่งที่มีคำสั่งย่อย จุดที่น่าสนใจอยู่ที่ for i in lists นี่แหละครับ นี่คือรูปแบบที่แน่นอนตายตัว หมายความว่า การวนรอบแต่ละครั้งค่า i จะเปลี่ยนไป โดยค่าที่อยู่ใน i จะถูกนำมาจาก ลิสต์ ที่ชื่อ lists ตามลำดับจนหมด ยกตัวอย่างเช่น
for i in [0,1,2,3,4]: print ’i’,i
จะได้ผลดังนี้
i 0 i 1 i 2 i 3 i 4
อ่านมาถึงตรงนี้ผู้ที่เคยเขียนโปรแกรมสารพัดภาษา น่าจะเริ่มงง แล้วจะเอาไปใช้ได้อย่างไรกัน เรื่องราวไม่ใหญ่โตอย่างที่คิดครับ ปัญหาคือทุกคนมักจะชินกับการบวกเลขแล้วใช้ index ในการเข้าถึง อาเรย์ หรืออะไรก็แล้วตามในทำนองนี้ เพราะนี้คือจุดประสงค์ของการใช้ ลูป แต่นี่ก็มันจะเป็นจุดที่ทำให้เขียนโปรแกรมผิดกันนั่นเอง เพราะเงื่อนไขการเริ่มและจบนั้นถูกกำหนดด้วยเงื่อนไข เช่น 0 ถึง 4 แต่ถ้าค่าเกิดกระโดดขึ้นมาโดยบังเอิญแทนที่จะมีค่าเป็น 4 แต่กลับมีค่าเป็น 5 ลูปนี้จะไม่มีวันจบ ด้วยเหตุนี้เอง ถ้าเรารู้ขอบเขตแน่นอนการใช้ ลิสต์ จะมีความถูกต้องมากกว่า ดังในกรณีนี้ มีเลขเรียงกัน 0 1 2 3 4 ถ้าใช้ลูปแบบข้างบน ค่าที่ได้จะไม่มีวันกระโดดเด็ดขาด
อย่าพึ่งตกใจว่าวิธีนี้จะบานปลายถ้าต้องลูปเลข 1 ถึง 1000000 เพราะต้องมีลิสต์ใหญ่มหาศาล และก็ไม่จำเป็นต้องมีซะด้วย เพราะมันเป็นเลขเรียงกัน ใช่แล้วครับ ไม่จำเป็น ไพธอน มีวิธีที่ง่ายกว่า ในกรณีของ for นี้ มันเป็นการ for ลงไปในชุดเลขที่เรียงกัน เพราะฉะนั้น ไพธอน จึงมีฟังก์ชั่นเอาไว้สำหรับสร้าง ลิสต์ โดยเฉพาะ 2 คำสั่ง ได้แก่ range() และ xrange() สำหรับตัวอย่างที่ผ่านมา สามารถเขียนแบบ ไพธอน ได้ดังนี้
for i in range(5): print ’i’,i
จริงๆ แล้ว range() กับ xrange() ให้ผลเหมือนกันทุกประการ แต่ต่างกันที่เวลาทำไปใช้งาน โดย range() จะสร้าง ลิสต์ ตามที่ระบุแล้วคืน ลิสต์ นั้นกลับมาทันที แต่ xrange() จะไม่ได้สร้าง ลิสต์ ทั้งหมดขึ้นมาในทีเดียว แต่ละส่งให้ทีละค่า วิธีของ xrange() นี้เรียกว่า Generator ครับ เหมาะสำหรับงานที่มีข้อมูลจำนวนมากและไม่จำเป็นต้องเก็บทุกอย่างในหน่วยความจำในครั้งเดียว
สำหรับ while นั้นตรงไปตรงมาเหมือนกับ while ปกติ แต่ก็เช่นเดียวกับคำสั่งอื่นๆ ของ ไพธอน ที่มีรูปแบบการใช้งานเพียงแบบเดียว ดังนี้
while expression: statement statement
เงื่อนไข expression มีลักษณะเดียวกับใน if เพราะฉะนั้นตัวอย่างด้านบนจะเขียนด้วย while ได้ดังต่อไปนี้
i = 0 while i < 5: print ’i’,i i += 1