คำสั่งเลือกเงื่อนไข
ในบทนี้ คุณจะได้เรียนเกี่ยวกับคำสั่งเลือกเงื่อนไขในภาษา Python เราจะพูดถึงการควบคุมการทำงานโปรแกรมด้วยคำสั่ง if, if else และ elif เพื่อให้โปรแกรมสามารถทำงานซับซ้อนและมีประสิทธิภาพมากขึ้น ยกตัวอย่างเช่น เครื่องปรับอากาศจะทำงานอัตโนมัติถ้าหากอุณหภูมิในห้องสูงหรือต่ำเกินไป หรือรถยนต์จะแสดงสัญญาณเตือนหากน้ำมันกำลังใกล้จะหมด เป็นต้น ซึ่งทั้งหมดนี้เกิดจากการกำหนดเงื่อนไขการทำงานให้โปรแกรม มาเริ่มกับคำสั่ง if ในภาษา Python
คำสั่ง if
คำสั่ง if เป็นคำสั่งที่ใช้ควบคุมการทำงานของโปรแกรมที่เป็นพื้นฐานและง่ายที่สุด เราใช้คำสั่ง if เพื่อสร้างเงื่อนไขให้โปรแกรมทำงานตามที่เราต้องการเมื่อเงื่อนไขนั้นตรงกับที่เรากำหนด เช่น การตรวจสอบค่าในตัวแปรกับตัวดำเนินการประเภทต่างๆ นี่เป็นรูปแบบของการใช้งานคำสั่ง if ในภาษา Python
if expression:
# statements
ในตัวอย่าง เป็นรูปแบบของการใช้งานคำสั่ง if และ expression
เป็นเงื่อนไขที่สร้างจากตัวดำเนินการประเภทต่างๆ ที่เป็น boolean expression โดยโปรแกรมจะทำงานในบล็อคคำสั่ง if ถ้าหากเงื่อนไขเป็น True ไม่เช่นนั้นโปรแกรมจะข้ามการทำงานไป ในบล็อคของคำสั่ง if จะประกอบไปด้วยคำสั่งการทำงานของโปรแกรม คำสั่งทั้งหมดในบล็อคต้องมีระยะเว้นช่องว่างที่เท่ากัน ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง if ในภาษา Python
n = 10
if n == 10:
print('n equal to 10')
logged_in = False
if not logged_in:
print('You must login to continue')
m = 4
if m % 2 == 0 and m > 0:
print('m is even and positive numbers')
if 3 > 10:
print('This block isn\'t executed')
ในตัวอย่าง เป็นการใช้งานคำสั่ง if เพื่อกำหนดให้โปรแกรมทำงานตามเงื่อนไขต่างๆ ในบล็อคแรกเป็นการตรวจสอบค่าในตัวแปร n
ว่าเท่ากับ 10 หรือไม่ เนื่องจากค่าในตัวแปรนั้นเท่ากับ 10 ทำให้เงื่อนเป็นจริง และโปรแกรมทำงานในบล็อคของคำสั่ง if และต่อมาเรามีตัวแปร boolean logged_in
เก็บค่าสถานะการเข้าสู่ระบบ เราได้ทำการตรวจสอบโดยการใช้ตัวดำเนินการ not
สำหรับตรวจสอบว่าถ้าหากผู้ใช้ไม่เข้าสู่ระบบ จะแสดงข้อความบอกว่าต้องเข้าระบบก่อนที่จะใช้งาน
ต่อมาเป็นการตรวจสอบค่าในตัวแปร m
ว่าเป็นทั้งจำนวนเต็มบวกและจำนวนคู่หรือไม่ เราได้ใช้ตัวดำเนินการ and
เพื่อเชื่อม expression ย่อยทั้งสอง และเงื่อนไขเป็นจริงทำให้ในบล็อคคำสั่ง if ทำงาน สุดท้ายเป็นเปรียบเทียบค่าของตัวเลข เราได้เปรียบว่า 3 มากกว่า 10 หรือไม่ เนื่องจากเงื่อนไขเป็น False ทำให้โปรแกรมข้ามการทำงานบล็อคนี้ไป
n equal to 10
You must login to post
m is even and positive numbers
นี่เป็นผลลัพธ์การทำงานของโปรแกรม คุณจะเห็นว่าในสามบล็อคแรกของคำสั่ง if นั้นทำงานเพราะว่าเงื่อนไขเป็นจริงหรือ True และในบล็อคสุดท้ายไม่ทำงานเพราะเงื่อนไขไม่เป็นจริงหรือ False
คำสั่ง if else
หลังจากที่คุณได้รู้จักกับคำสั่ง if ไปแล้ว อีกคำสั่งหนึ่งที่ทำงานควบคู่กับคำสั่ง if คือคำสั่ง else
clause โดยโปรแกรมจะทำงานในคำสั่ง else ถ้าหากเงื่อนไขในคำสั่ง if นั้นไม่เป็นจริง กล่าวอีกนัยหนึ่ง มันจะทำงานเมื่อเงื่อนไขก่อนหน้านั้นไม่เป็นจริงหรือเป็นเงื่อนไข Default มาดูตัวอย่างการใช้งาน if else ในภาษา Python
n = 5
if n == 10:
print('n equal to 10')
else:
print('n is something else except 10')
name = 'James'
if name == 'Mateo':
print('Hi, Mateo.')
else:
print('Who are you?')
money = 300
if money >= 350:
print('You can buy an iPad')
else:
print('You don\'t have enough money to buy an iPad')
ในตัวอย่าง เป็นโปรแกรมเพื่อทดสอบการทำงานของคำสั่ง else เราได้เพิ่มบล็อคของคำสั่ง else เข้ามาหลังจากคำสั่ง if ซึ่งโค้ดในบล็อคของคำสัง else จะทำงาน ถ้าหากเงื่อนไขใน if ไม่เป็นจริง นั่นหมายถึงโปรแกรมของเราสามารถทำงานได้เพียงหนึ่งทางเลือกเท่านั้น
ในการตรวจสอบครั้งแรก เป็นการตรวจสอบค่าในตัวแปร n
ว่าเท่ากับ 10 หรือไม่ เพราะว่าค่าในตัวแปรนั้นเป็น 5 ทำให้เงื่อนไขไม่เป็นจริง และโปรแกรมทำงานในบล็อคคำสั่ง else แทน ต่อมาเป็นการตรวจสอบชื่อในตัวแปร name
ว่าเป็น"Mateo"หรือไม่ เพราะว่าค่าในตัวแปรนั้นเป็น "James" ทำให้โปรแกรมทำงานในบล็อคคำสั่ง else และสุดท้ายนั้นเราตรวจสอบว่าหากมีเงินในตัวแปร money
มากกว่าหรือเท่ากับ 350 จะได้ซื้อ iPad เพราะว่าเงินไม่พอ โปรแกรมจึงบอกว่าเงินไม่พอที่จะซื้อ
n is something else except 10
Who are you?
You don't have enough money to buy an iPad
นี่เป็นผลลัพธ์การทำงานของโปรแกรมซึ่งจะทำงานในบล็อคของคำสั่ง else ทั้งหมดเพราะเงื่อนไขไม่เป็นจริงทั้งหมด
คำสั่ง if elif
คำสั่ง elif นั้นเป็นคำสั่งที่ใช้สำหรับสร้างเงื่อนไขแบบหลายทางเลือกให้กับโปรแกรมที่มีการทำงานเช่นเดียวกับ switch case ในภาษาอื่นๆ คำสั่ง elif นั้นต้องใช้หลังจากคำสั่ง if เสมอและสามารถมี else ได้ในเงื่อนไขสุดท้าย มาดูตัวอย่างการใช้งานคำสั่ง elif ในภาษา Python
print('Welcome to marcuscode\'s game')
level = input('Enter level (1 - 4): ')
if level == '1':
print('Easy')
elif level == '2':
print('Medium')
elif level == '3':
print('Hard')
elif level == '4':
print('Expert')
else:
print('Invalid level selected')
ในตัวอย่าง เป็นโปรแกรมจำลองในการเลือกโหมดของการเล่นเกม เราได้ให้ผู้ใช้กรอกค่าระหว่าง 1 -4 เพื่อใช้ในการเปรียบเทียบกับระดับความยากของเกม โดยที่ 1 เป็นระดับที่ง่ายที่สุด และ 4 นั้นเป็นระดับที่ยากที่สุด คุณจะเห็นว่าเราได้ให้คำสั่ง elif เพราะเรามีเงื่อนไข 4 แบบ และคำสั่ง else ในการณีที่ตัวเลขที่ผู้เล่นกรอกเข้ามานั้นไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้าเลย
Welcome to marcuscode's game
Enter level (1 - 4): 4
Expert
Welcome to marcuscode's game
Enter level (1 - 4): 7
Invalid level selected
นี่เป็นผลลัพธ์การทำงานของโปรแกรมเมื่อเรากรอก 4 และ 7 ตามลำดับ เมื่อเรากรอก 4 นั้นโปรแกรมตรงกับเงื่อนไขของ elif ที่ level == 4
และเมื่อเรากรอก 7 โปรแกรมไม่ตรงกับเงื่อนไขใดๆ เลยทำให้ทำงานในบล็อคของคำสั่ง else
ตัวอย่างการใช้งานคำสั่งเลือกเงื่อนไขในภาษา Python
หลังจากที่คุณได้เรียนในคำสั่งเลือกเงื่อนไขประเภทต่างๆ ในภาษา Python ไปแล้ว ต่อไปจะเป็นการนำมาประยุกต์เขียนโปรแกรมเพื่อบอกเวลาในรูปแบบของ "เวลาที่ผ่านไป" ซึ่งการแสดงเวลาในรูปแบบนี้ สามารถทำให้ทราบว่าเวลาที่เกิดขึ้นในอดีตผ่านไปนานเท่าไหร่แล้ว ซึ่งมีการใช้งานเป็นจำนวนมากในเว็บไซต์ประเภทต่างๆ เช่น Facebook Twitter เป็นต้น นี่เป็นโค้ดของโปรแกรม
import datetime
import math
# We want to calculate time difference to this date
now = datetime.datetime(2017, 3, 29, 11, 00, 00)
# Uncomment line below for current datetime object
# now = datetime.datetime.now()
# create a list and add all datetime(s)
# all dates that earlier than 'now' object
date_list = [];
date_list.append(datetime.datetime(2017, 3, 29, 10, 59, 24))
date_list.append(datetime.datetime(2017, 3, 29, 10, 12, 12))
date_list.append(datetime.datetime(2017, 3, 24, 17, 24, 54))
date_list.append(datetime.datetime(2017, 1, 14, 8, 43, 5))
date_list.append(datetime.datetime(2016, 8, 13, 19, 20, 20))
date_list.append(datetime.datetime(2012, 2, 8, 19, 20, 20))
print('Time difference to', end = ' ')
print(now.strftime("%B %d, %Y %I:%M:%S %p"))
for d in date_list:
time_dif = (now - d).total_seconds()
print(d.strftime("%B %d, %Y %I:%M:%S %p"), ' => ', end = '')
# calculate for time ago since d
if time_dif < 60:
print(math.floor(time_dif), 'secs ago')
elif time_dif <= 3600:
print(math.floor(time_dif / 60), 'mins ago')
elif time_dif <= 86400:
print(math.floor(time_dif / 3600), 'hours ago')
elif time_dif <= 86400 * 30:
print(math.floor(time_dif / 86400), 'days ago')
elif time_dif <= 86400 * 365.25:
print(math.floor(time_dif / (86400 * 30)), 'months ago')
else:
print(math.floor(time_dif / (86400 * 365.25)), 'years ago')
ในตัวอย่าง เป็นโปรแกรมบอกเวลาในรูปแบบของเวลาที่ผ่านไป ในตัวแปร now
เป็นตัวแปรสำหรับเก็บออบเจ็คของวันที่ ที่เราจะใช้อ้างอิงในการคำนวณว่าเวลาผ่านไปนานเท่าไหร่แล้วจนถึงวันนี้ สมมติว่าวันนี้เป็นวันที่ March 29, 2017 เวลา 11 AM เราทำแบบนี้เพื่อไม่ต้องการให้ผลลัพธ์ของเวลาเปลี่ยนไป ซึ่งในการใช้งานในโปรแกรมจริง ค่าของ now
นั้นเราจะใช้เป็น datetime.datetime.now()
แทน
date_list = [];
date_list.append(datetime.datetime(2017, 3, 29, 10, 59, 24))
date_list.append(datetime.datetime(2017, 3, 29, 10, 12, 12))
date_list.append(datetime.datetime(2017, 3, 24, 17, 24, 54))
date_list.append(datetime.datetime(2017, 1, 14, 8, 43, 5))
date_list.append(datetime.datetime(2016, 8, 13, 19, 20, 20))
date_list.append(datetime.datetime(2012, 2, 8, 19, 20, 20))
หลังจากนั้น เราสร้างออบเจ็ค datetime
ของวันและเวลาที่ต้องการคำนวณเข้าไปใน List date_list
เราได้เพิ่มช่วงเวลาต่างๆ อย่างหลากหลายเพื่อให้คุณเห็นผลลัพธ์การทำงานของโปรแกรมอย่างทั่วถึง หลังจากนั้นเราใช้คำสั่ง for loop ในการวนอ่านค่าวันที่ใน List
# calculate time passed from date to now
if time_dif < 60:
print(math.floor(time_dif), 'secs ago')
elif time_dif <= 3600:
print(math.floor(time_dif / 60), 'mins ago')
elif time_dif <= 86400:
print(math.floor(time_dif / 3600), 'hours ago')
elif time_dif <= 86400 * 30:
print(math.floor(time_dif / 86400), 'days ago')
elif time_dif <= 86400 * 365.25:
print(math.floor(time_dif / (86400 * 30)), 'months ago')
else:
print(math.floor(time_dif / (86400 * 365.25)), 'years ago')
มาถึงการคำนวณหาเวลาที่ผ่านไปโดยการใช้คำสั่ง if elif และ else การคำนวณนั้นเป็นการบอกเวลาที่ผ่านไปโดยประมาณ โดยตัดความละเอียดของเวลาช่วงหลังทิ้งไป เช่น เราคำนวณได้ 3 วันกับ 5 ชั่วโมง เราแสดงผลเพียง 3 วัน ซึ่งเป็นค่าโดยประมาณ
Time difference to March 29, 2017 11:00:00 AM
March 29, 2017 10:59:24 AM => 36 secs ago
March 29, 2017 10:12:12 AM => 47 mins ago
March 24, 2017 05:24:54 PM => 4 days ago
January 14, 2017 08:43:05 AM => 2 months ago
August 13, 2016 07:20:20 PM => 7 months ago
February 08, 2012 07:20:20 PM => 5 years ago
นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการบอกเวลาที่ผ่านมา เหมือนใน Facebook หรือ Twitter
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับคำสั่งเลือกเงื่อนไข if elif และ else ในพื้นฐานสำหรับควบคุมโปรแกรมให้ทำงานตามเงื่อนไขที่แตกต่างกันออกไป และเราได้ให้ตัวอย่างของการบอกเวลาในรูปแบบเวลาที่ผ่านไปที่จะช่วยให้คุณเข้าใจมากขึ้น