คำสั่งเลือกเงื่อนไข

29 March 2017

ในบทนี้ คุณจะได้เรียนเกี่ยวกับคำสั่งเลือกเงื่อนไขในภาษา 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 ในพื้นฐานสำหรับควบคุมโปรแกรมให้ทำงานตามเงื่อนไขที่แตกต่างกันออกไป และเราได้ให้ตัวอย่างของการบอกเวลาในรูปแบบเวลาที่ผ่านไปที่จะช่วยให้คุณเข้าใจมากขึ้น

บทความนี้เป็นประโยชน์หรือไม่?Yes·No