🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

[โค้ดพร้อมใช้] มาสร้างแอปจับเวลาด้วย Python กันเถอะ! (ใช้งานโมดูล time)

"จะเริ่มเขียนโปรแกรมจากตรงไหนดี?" "อ่านหนังสือแล้วก็เจอแต่ข้อผิดพลาดจนท้อใจ..."

เมื่อไม่กี่เดือนก่อน ผมก็รู้สึกแบบเดียวกันเป๊ะๆ เลยครับ ผมเริ่มจากความรู้เป็นศูนย์ ลองผิดลองถูกโดยใช้ AI ช่วย จนตอนนี้สามารถสร้างเว็บไซต์ 2 แห่งได้ด้วยตัวเองแล้ว

ในบทความนี้ เป้าหมายหลักของผมคือการให้ทุกคนได้สัมผัสกับความสนุกของการ "ทำให้มันทำงานได้" จากมุมมองของคนที่เป็นมือใหม่เหมือนกัน ครั้งนี้เราจะใช้ "พ่อมดแห่งเวลา" ที่มีมาให้ใน Python อยู่แล้ว นั่นคือโมดูล `time` เพื่อสร้างแอปจับเวลาและนาฬิกาปลุกที่ง่ายอย่างน่าทึ่ง

เรื่องทฤษฎียากๆ เอาไว้ทีหลัง! ก่อนอื่นลองคัดลอกโค้ดไปวาง แล้วสัมผัสประสบการณ์ที่คอมพิวเตอร์ของคุณจะกลายเป็นเครื่องจับเวลาได้เลย!

ขั้นตอนที่ 1: มาลองสัมผัสด้วยตัวเอง! โปรแกรมสุดง่ายที่รอแค่ 3 วินาที

สิบปากว่าไม่เท่าตาเห็น ก่อนอื่นเรามาลองสั่งให้คอมพิวเตอร์ "รอแค่ 3 วินาที" ด้วยโปรแกรมจับเวลาที่ง่ายที่สุดในโลกกันดีกว่า คัดลอกโค้ดด้านล่างแล้วลองรันในสภาพแวดล้อม Python ของคุณได้เลย


# คาถาสำหรับใช้ 'เวทมนตร์แห่งเวลา'
import time

print("เริ่มจับเวลา")

# หยุดการทำงานของโปรแกรมเป็นเวลา 3 วินาที
time.sleep(3)

print("ผ่านไป 3 วินาทีแล้ว! ทำได้ดีมาก")
        

เมื่อรันโปรแกรม จะมีข้อความ "เริ่มจับเวลา" แสดงขึ้นมา จากนั้นจะหยุดไปชั่วครู่ แล้วข้อความ "ผ่านไป 3 วินาทีแล้ว!" ก็จะปรากฏขึ้น แค่นี้เอง! นี่แหละคือพื้นฐานของการจับเวลา

เป็นไงบ้างครับ? ง่ายกว่าที่คิดไว้เยอะเลยใช่ไหม? นี่คือประสบการณ์ของการ "ทำให้มันทำงานได้" ความสำเร็จเล็กๆ น้อยๆ แบบนี้แหละที่เป็นเชื้อเพลิงที่ดีที่สุดในการเรียนเขียนโปรแกรมต่อไป


ขั้นตอนที่ 2: ทำให้เป็นของคุณ! มาตั้งค่าวินาทีได้อย่างอิสระกันเถอะ

การจับเวลาแค่ 3 วินาทีก็ดีอยู่หรอก แต่ไหนๆ ก็ทำแล้ว เรามาทำให้มันตั้งเวลาตามใจชอบได้ดีกว่า จะได้เอาไปใช้ตอนทำอาหารหรืออ่านหนังสือได้จริงไหม? ต่อไปเราจะมาดัดแปลงให้โปรแกรมถามว่า "จะให้รออีกกี่วินาที?" ทุกครั้งที่รันกัน

และนี่คือเวทมนตร์ที่จะปรากฏตัวขึ้นมา นั่นคือ `input()` ที่ใช้รับข้อมูลตัวอักษรจากผู้ใช้นั่นเอง


import time

# รับข้อมูลจากผู้ใช้ด้วย input()
input_seconds_str = input("ต้องการให้แจ้งเตือนในอีกกี่วินาที? กรุณาป้อนตัวเลข: ")

# [จุดสำคัญ!] แปลง 'สตริง' ที่ป้อนเข้ามาให้เป็น 'จำนวนเต็ม'
seconds = int(input_seconds_str)

print(f"ตั้งเวลาไว้ที่ {seconds} วินาทีแล้ว")

time.sleep(seconds)

print(f"ครบ {seconds} วินาทีแล้ว! หมดเวลา!")
        

เมื่อรันโปรแกรมนี้ โปรแกรมจะหยุดทำงานชั่วคราวและมีเคอร์เซอร์กะพริบขึ้นมา ลองพิมพ์จำนวนวินาทีที่ต้องการ (เช่น `10`) แล้วกด Enter ดูสิครับ ข้อความจะแสดงขึ้นมาหลังจากที่รอตามจำนวนวินาทีที่คุณป้อน

⚠️ กับดักที่มือใหม่ทุกคนต้องเจอ: `input()` จะรับค่าเป็น "สตริง" เสมอ

ตรงนี้ผมขอแชร์จุดที่สำคัญมากๆ ที่ผมเคยพลาดมาก่อน นั่นคือกฎที่ว่า ข้อมูลที่รับมาจาก `input()` ไม่ว่าเราจะพิมพ์ตัวเลขเข้าไปก็ตาม มันจะถูกมองว่าเป็น "สตริง" (ข้อความ) ทั้งหมด

แต่ `time.sleep()` จะรับค่าได้เฉพาะ "ตัวเลข" วินาทีเท่านั้น ถ้าเราพยายามส่ง "สตริง" `"10"` เข้าไป โปรแกรมจะโกรธแล้วแจ้งข้อผิดพลาดว่า "นี่มันไม่ใช่ตัวเลขนะ!"

ดังนั้น บรรทัด `seconds = int(input_seconds_str)` จึงจำเป็นมาก มันคือการนำสตริงมาใส่ในเวทมนตร์ `int()` เพื่อแปลงร่างให้กลายเป็น "จำนวนเต็ม (integer)" ที่คอมพิวเตอร์สามารถคำนวณได้ การ "แปลงชนิดข้อมูล" แบบนี้เป็นแนวคิดพื้นฐานที่สำคัญสุดๆ ที่เจอได้ในทุกสถานการณ์ของการเขียนโปรแกรมเลยครับ จำไว้ให้ดีนะ!


ขั้นตอนที่ 3: ทำให้หน้าตาดูดีขึ้น! การสร้างฟังก์ชันนับถอยหลัง

ระหว่างที่นาฬิกาจับเวลากำลังทำงาน คุณเคยรู้สึกกังวลไหมว่ามันยังทำงานอยู่จริงรึเปล่า? เรามาเพิ่มฟังก์ชันนับถอยหลังเพื่อแสดงเวลาที่เหลือกันดีกว่า จะได้รู้ว่า "เหลืออีกกี่วินาที"

ในขั้นตอนนี้ เราจะใช้เวทมนตร์แห่งการ "ทำซ้ำ" นั่นคือ `for` loop และจะใช้เทคนิคเล็กๆ น้อยๆ เพื่อให้ตัวเลขที่แสดงผลอยู่บนบรรทัดเดียวและอัปเดตไปเรื่อยๆ


import time

seconds = 10 # กำหนดค่าไว้ที่ 10 วินาทีเพื่อให้เข้าใจง่าย

# วนซ้ำตั้งแต่ 10 ถึง 1 โดยลดค่าทีละ 1
for i in range(seconds, 0, -1):
    # แสดงผลสวยงามด้วย f-string และ end="\r" คือคาถาวิเศษ!
    print(f"เวลาที่เหลือ: {i} วินาที", end="\r")
    
    # รอ 1 วินาที
    time.sleep(1)

# ข้อความหลังจากนับถอยหลังเสร็จ
# เทคนิคคือใส่ช่องว่างข้างหลังเพื่อลบข้อความเดิม
print("หมดเวลาแล้ว!          ")
        

ลองรันดูสิครับ เป็นอย่างไรบ้าง? คุณน่าจะเห็นตัวเลข `10, 9, 8...` ลดลงเรื่อยๆ ที่ตำแหน่งเดิมในเทอร์มินัล เหมือนแอปจับเวลาของจริงเลยใช่ไหมล่ะ!


ขั้นตอนที่ 4: ในที่สุดก็สำเร็จ! นาฬิกาจับเวลาของจริงพร้อมเสียงปลุก

มาถึงขั้นตอนสุดท้ายแล้วครับ เราจะมาเพิ่มฟังก์ชันปลุกด้วย "เสียง" จริงๆ ไม่ใช่แค่แสดงข้อความเมื่อหมดเวลา

ไม่ต้องใช้ไลบรารีพิเศษอะไรเลยครับ คอมพิวเตอร์ส่วนใหญ่ (ในเทอร์มินัล) มีฟังก์ชันที่ซ่อนอยู่ คือเมื่อเราสั่งให้แสดง "อักขระพิเศษ" บางตัว จะมี "เสียงบี๊บ" ดังขึ้นมา อักขระตัวนั้นก็คือ `\a` นั่นเอง

นี่คือโค้ดเวอร์ชันสมบูรณ์ที่รวมทุกฟังก์ชันที่เราทำมาทั้งหมด แถมยังเพิ่มการจัดการข้อผิดพลาดเมื่อผู้ใช้ป้อนข้อมูลที่ไม่ใช่ตัวเลขเข้าไปด้วย!


# นำเข้าโมดูล time
import time

# ใช้ try...except เพื่อดักจับข้อผิดพลาดที่อาจเกิดขึ้น
try:
    # รับค่าจำนวนวินาทีจากผู้ใช้
    input_seconds_str = input("ต้องการให้ปลุกในอีกกี่วินาที? กรุณาป้อนตัวเลข: ")
    
    # แปลงสตริงที่รับเข้ามาเป็นจำนวนเต็ม (int)
    seconds = int(input_seconds_str)

    print(f"เริ่มนับถอยหลัง {seconds} วินาที")

    # วนลูปตั้งแต่จำนวนวินาทีที่กำหนดจนถึง 1
    for i in range(seconds, 0, -1):
        # ใช้ f-string เพื่อแสดงผลเวลาที่เหลือให้สวยงาม
        # end="\r" ทำให้การ print ครั้งต่อไปเขียนทับบรรทัดเดิม
        print(f"เวลาที่เหลือ: {i} วินาที  ", end="\r")
        # รอ 1 วินาที
        time.sleep(1)

    # เมื่อลูปจบ (หมดเวลา) ให้แสดงข้อความ
    # \a คืออักขระพิเศษที่ทำให้เทอร์มินัลส่งเสียงบี๊บ (Alert)
    print("หมดเวลา! เสียงปลุกดังแล้ว! \a")

except ValueError:
    # การจัดการกรณีที่ป้อนค่าอื่นที่ไม่ใช่ตัวเลข (int() จะเกิดข้อผิดพลาด)
    print("ข้อผิดพลาด: กรุณาป้อนตัวเลขที่ถูกต้อง")
except KeyboardInterrupt:
    # การจัดการกรณีที่ผู้ใช้หยุดโปรแกรมด้วย Ctrl+C
    print("\nหยุดการจับเวลาแล้ว")
        

เพียงเท่านี้ คอมพิวเตอร์ของคุณก็กลายเป็นแอปจับเวลาพร้อมนาฬิกาปลุกอย่างสมบูรณ์แล้ว แถมยังฉลาดขึ้นเล็กน้อย เพราะถ้าเราป้อนตัวอักษรอื่นที่ไม่ใช่ตัวเลข (เช่น `abc`) โปรแกรมก็จะแสดงข้อความแจ้งข้อผิดพลาดแล้วจบการทำงานอย่างถูกต้อง

ข้อควรระวัง: เสียงบี๊บจาก `\a` อาจไม่ดังขึ้นอยู่กับการตั้งค่าของระบบปฏิบัติการหรือเทอร์มินัลที่คุณใช้ แต่ถึงจะไม่ได้ยินเสียง ก็ไม่ต้องกังวลนะครับ เพราะการทำงานของโปรแกรมยังคงถูกต้อง


สรุป: ความสำเร็จเล็กๆ น้อยๆ จากการ 'ทำให้มันทำงานได้!' คือพลังอันยิ่งใหญ่สำหรับอนาคต

お疲れ様でした!今回は`time`モジュールという、Pythonの基本的な機能を組み合わせるだけで、実用的なタイマーアプリが作れることを体験してもらいました。

  1. ทำให้โปรแกรมรอด้วย `time.sleep()`
  2. รับคำสั่งจากผู้ใช้ด้วย `input()`
  3. แปลงสตริงเป็นตัวเลขด้วย `int()` (สำคัญมาก!)
  4. ทำซ้ำด้วย `for` loop
  5. ทำให้การแสดงผลดูดีขึ้นด้วย `print(end="\r")`
  6. ส่งเสียงปลุกด้วย `\a`
  7. เตรียมพร้อมรับมือกับข้อผิดพลาดด้วย `try...except`

แต่ละฟังก์ชันอาจดูเรียบง่าย แต่ความสนุกของการเขียนโปรแกรมคือการนำสิ่งเหล่านี้มารวมกันเพื่อสร้าง "เครื่องมือที่มีประโยชน์" ขึ้นมาได้จริงๆ ความสำเร็จเล็กๆ ที่คุณได้สัมผัสในวันนี้ ไม่ว่าจะเป็นการ "คัดลอกโค้ดมาแล้วรันได้!" หรือ "ดัดแปลงเองได้!" จะเป็นแรงผลักดันที่สำคัญที่สุดให้คุณสร้างสรรค์สิ่งที่ซับซ้อนและน่าสนใจยิ่งขึ้นในอนาคต

ลองนำโค้ดนี้ไปต่อยอดดูสิครับ อาจจะดัดแปลงให้รับค่าเป็น "นาที" ได้ หรือจะลองทำเป็นนาฬิกาจับเวลาแบบ Pomodoro (ทำงาน 25 นาที พัก 5 นาที) ก็ได้ ขอให้สนุกกับการทดลองนะครับ!


[ของแถม] HTML สำหรับทดลองโค้ดทั้งหมดในบทความนี้

คุณสามารถคัดลอกโค้ด Python เวอร์ชันสมบูรณ์ที่นำเสนอในบทความนี้จากบล็อกโค้ดด้านล่าง แล้วบันทึกเป็นไฟล์ชื่อ `timer.py` ในคอมพิวเตอร์ของคุณ เพื่อนำไปรันและทดลองได้ทุกเมื่อ ลองเอาไปรันบนเครื่องของคุณดูนะครับ

<!-- บันทึกเป็น timer.py แล้วรันได้เลย -->
# นำเข้าโมดูล time
import time

# ใช้ try...except เพื่อดักจับข้อผิดพลาดที่อาจเกิดขึ้น
try:
    # รับค่าจำนวนวินาทีจากผู้ใช้
    input_seconds_str = input("ต้องการให้ปลุกในอีกกี่วินาที? กรุณาป้อนตัวเลข: ")
    
    # แปลงสตริงที่รับเข้ามาเป็นจำนวนเต็ม (int)
    seconds = int(input_seconds_str)

    print(f"เริ่มนับถอยหลัง {seconds} วินาที")

    # วนลูปตั้งแต่จำนวนวินาทีที่กำหนดจนถึง 1
    for i in range(seconds, 0, -1):
        # ใช้ f-string เพื่อแสดงผลเวลาที่เหลือให้สวยงาม
        # end="\r" ทำให้การ print ครั้งต่อไปเขียนทับบรรทัดเดิม
        print(f"เวลาที่เหลือ: {i} วินาที  ", end="\r")
        # รอ 1 วินาที
        time.sleep(1)

    # เมื่อลูปจบ (หมดเวลา) ให้แสดงข้อความ
    # \a คืออักขระพิเศษที่ทำให้เทอร์มินัลส่งเสียงบี๊บ (Alert)
    print("หมดเวลา! เสียงปลุกดังแล้ว! \a")

except ValueError:
    # การจัดการกรณีที่ป้อนค่าอื่นที่ไม่ใช่ตัวเลข (int() จะเกิดข้อผิดพลาด)
    print("ข้อผิดพลาด: กรุณาป้อนตัวเลขที่ถูกต้อง")
except KeyboardInterrupt:
    # การจัดการกรณีที่ผู้ใช้หยุดโปรแกรมด้วย Ctrl+C
    print("\nหยุดการจับเวลาแล้ว")

        

ขั้นตอนต่อไป

เมื่อสร้างนาฬิกาจับเวลาได้แล้ว ต่อไปมาลองสร้างเกมทายตัวเลขแข่งกับคอมพิวเตอร์ดูไหม? การใช้โมดูล `random` เพื่อจัดการกับเลขสุ่มจะเปิดประตูสู่ความสนุกอีกระดับของการเขียนโปรแกรม

➡️ สร้างเกมทายตัวเลขอย่างง่ายใน Python (ใช้งาน random)