[คัดลอกและวางเพื่อใช้งานได้เลย!] คู่มือสร้างเกมทายตัวเลขด้วย Python สำหรับมือใหม่: บันทึกของมือใหม่ที่ก้าวผ่านมาได้ด้วย AI
สวัสดีครับ! ยินดีต้อนรับสู่โลกแห่งการเขียนโปรแกรม
เมื่อไม่กี่เดือนก่อน ผมก็เหมือนกับทุกๆ คน คือไม่มีความรู้ด้านโปรแกรมมิ่งเลยแม้แต่น้อย ไม่รู้ว่าจะเริ่มจากตรงไหนดี และต้องปวดหัวทุกครั้งที่เจอกับข้อผิดพลาด... แต่ด้วยความช่วยเหลือจาก AI และการลองผิดลองถูกนับครั้งไม่ถ้วน ตอนนี้ผมสามารถสร้างเว็บไซต์ 2 แห่ง (buyonjapan.com, copicode.com) ได้ด้วยตัวเองแล้วครับ
ในเว็บไซต์นี้ ผมจะอธิบายถึง "สิ่งที่ผมอยากรู้จริงๆ" "จุดที่ผมติดขัดจริงๆ" และ "ผมแก้ไขมันได้อย่างไร" ในระหว่างเส้นทางนั้น โดยจะพยายามใช้ศัพท์เทคนิคให้น้อยที่สุดและอธิบายใน "มุมมองของมือใหม่เช่นเดียวกัน" ครับ
ในครั้งนี้ เราจะมาสร้าง "เกมทายตัวเลข" ด้วย Python ซึ่งเป็นก้าวแรกที่นิยมมากในการเรียนเขียนโปรแกรม วัตถุประสงค์ของบทความนี้มีเพียงหนึ่งเดียวคือ "การนำเสนอโค้ดที่สามารถทำงานได้อย่างสมบูรณ์เพียงแค่คัดลอกและวาง เพื่อให้คุณได้สัมผัสกับประสบการณ์ความสำเร็จจากการที่ 'มันทำงานได้'" ครับ
เรามาสัมผัสความสนุกของการเขียนโปรแกรมไปด้วยกันเถอะครับ!
มาลองสัมผัสเวอร์ชันสมบูรณ์กันก่อน! โค้ดทั้งหมดที่คัดลอกไปใช้ได้เลย
สิบปากว่าไม่เท่าตาเห็น ก่อนอื่น ผมจะให้ดูโค้ดเวอร์ชันสมบูรณ์ของเกมทายตัวเลขที่เราจะสร้างไปด้วยกัน ลองคัดลอกโค้ดทั้งหมดด้านล่างไปรันในสภาพแวดล้อมของคุณ (เช่น VSCode หรือ Google Colaboratory) ดูนะครับ การได้ลองเล่นและสัมผัสด้วยตัวเองว่าเป็นเกมแบบไหน คือวิธีที่เร็วที่สุดในการทำความเข้าใจครับ!
import random
def number_guessing_game():
while True:
print("\n--- เกมทายตัวเลข ---")
print("กรุณาเลือกระดับความยาก:")
print("1: ง่าย (1-10)")
print("2: ปานกลาง (1-100)")
print("3: ยาก (1-1000)")
level = input("กรุณาใส่ระดับความยาก (1, 2, 3): ")
if level == '1':
min_num, max_num = 1, 10
elif level == '2':
min_num, max_num = 1, 100
elif level == '3':
min_num, max_num = 1, 1000
else:
print("การเลือกไม่ถูกต้อง กรุณาใส่ '1', '2' หรือ '3'")
continue
answer = random.randint(min_num, max_num)
count = 0
print(f"\nทายตัวเลขระหว่าง {min_num} ถึง {max_num}!")
while True:
try:
guess_str = input(f"การทายของคุณ (จำนวนครั้งที่เหลือ: ไม่จำกัด): ")
guess = int(guess_str)
count += 1
if guess < min_num or guess > max_num:
print(f"อยู่นอกขอบเขต! กรุณาใส่ตัวเลขระหว่าง {min_num} ถึง {max_num}")
elif guess < answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องใหญ่กว่านี้ (จำนวนครั้งที่ทาย: {count})")
elif guess > answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องเล็กกว่านี้ (จำนวนครั้งที่ทาย: {count})")
else:
print(f"\n🎉🎉🎉 ถูกต้อง! ขอแสดงความยินดีด้วย! 🎉🎉🎉")
print(f"ตัวเลขที่ถูกต้องคือ {answer}")
print(f"คุณใช้จำนวนครั้งในการทาย {count} ครั้ง")
break
except ValueError:
print("ข้อผิดพลาด: กรุณาใส่ตัวเลขเท่านั้น ห้ามใช้อักขระหรือสัญลักษณ์")
while True:
replay = input("\nเล่นอีกครั้งหรือไม่? (ใช่ / ไม่): ").lower()
if replay in ["ใช่", "ไม่"]:
break
else:
print("การป้อนข้อมูลไม่ถูกต้อง กรุณาใส่ 'ใช่' หรือ 'ไม่'")
if replay == "ไม่":
print("ขอบคุณที่มาเล่น! แล้วเจอกันใหม่นะ!")
break
# เริ่มเกม
number_guessing_game()
เป็นอย่างไรบ้างครับ? คงจะเป็นเกมง่ายๆ ที่ให้ทายตัวเลขที่คอมพิวเตอร์คิดขึ้นมาใช่ไหมครับ จากส่วนถัดไป เราจะมาแยกส่วนประกอบของโค้ดนี้ทีละชิ้น และสร้างมันขึ้นมาจากศูนย์กันครับ
ขั้นตอนที่ 1: สร้างโครงสร้างหลักของเกม (เวอร์ชันพื้นฐานที่สุด)
ไม่ว่าโปรแกรมจะดูซับซ้อนแค่ไหน หากย้อนกลับไปดูที่ต้นตอแล้ว มันก็เป็นเพียงการรวมกันของคำสั่งง่ายๆ เท่านั้น เรามาเริ่มสร้างจากส่วนที่เป็น "โครงสร้างหลัก" ที่จำเป็นที่สุดสำหรับเกมนี้กันก่อนครับ
เครื่องมือที่จำเป็น: โมดูล `random` คืออะไร?
ในการสร้างเกมทายตัวเลข ก่อนอื่นเราต้องให้คอมพิวเตอร์สุ่มเลือกตัวเลขขึ้นมาหนึ่งตัว ซึ่งเครื่องมือที่เราจะใช้ก็คือฟังก์ชันมาตรฐานของ Python ที่เรียกว่า "โมดูล `random`" ครับ
พอได้ยินคำว่า "โมดูล" อาจจะรู้สึกว่ายาก แต่ให้คิดง่ายๆ ว่ามันคือ "กล่องเครื่องมือที่เต็มไปด้วยฟังก์ชันที่มีประโยชน์" ครับ โมดูล `random` มีฟังก์ชันสำหรับสร้างตัวเลขสุ่ม หรือสลับลำดับองค์ประกอบในลิสต์ เป็นต้น
ในครั้งนี้ เราจะใช้ฟังก์ชันที่ชื่อว่า `random.randint(a, b)` ซึ่งเป็นคำสั่งที่ใช้สร้างจำนวนเต็มแบบสุ่มหนึ่งตัวที่อยู่ในช่วงตั้งแต่ `a` ถึง `b` (รวม a และ b ด้วย) ตัวอย่างเช่น ถ้าเขียนว่า `random.randint(1, 100)` ก็จะมีการสุ่มเลือกตัวเลขหนึ่งตัวจาก 1 ถึง 100 ครับ
หากต้องการทราบรายละเอียดเพิ่มเติม สามารถดูได้ที่ เอกสารทางการของ Python แต่ตอนนี้แค่รู้ว่า "มีฟังก์ชันแบบนี้อยู่" ก็เพียงพอแล้วครับ
โค้ดแรก: แค่นี้ก็ทำงานได้แล้ว!
เอาล่ะครับ เรามาสร้างหัวใจของเกมกันเลย สิ่งที่จำเป็นมี 4 ขั้นตอนดังนี้ครับ
- ทำให้สามารถใช้โมดูล `random` ได้ (`import`)
- สร้างตัวเลขคำตอบแบบสุ่มตั้งแต่ 1 ถึง 100
- ให้ผู้เล่นป้อนค่าที่ทาย (`input`)
- เปรียบเทียบคำตอบกับค่าที่ทาย แล้วแสดงผลลัพธ์ (`if/else`)
เมื่อเขียนเป็นโค้ดจะได้ดังนี้ครับ
# 1. นำเข้าโมดูล random
import random
# 2. สร้างจำนวนเต็มแบบสุ่มตั้งแต่ 1 ถึง 100 และบันทึกลงในตัวแปร answer
answer = random.randint(1, 100)
print("ทายตัวเลขตั้งแต่ 1 ถึง 100!")
# 3. รับค่าที่ป้อนจากผู้เล่น
guess_str = input("การทายของคุณ: ")
# แปลงสตริงที่ได้รับจาก input() เป็นตัวเลข (จำนวนเต็ม) ที่สามารถคำนวณได้
guess = int(guess_str)
# 4. เปรียบเทียบค่าที่ทายกับคำตอบและแสดงผลลัพธ์
if guess == answer:
print("🎉 ถูกต้อง! ขอแสดงความยินดี!")
else:
print(f"น่าเสียดาย! คำตอบที่ถูกต้องคือ {answer}")
เมื่อรันโค้ดนี้ คุณจะสามารถทายได้เพียงครั้งเดียว แต่มันก็ตัดสินได้แล้วว่าถูกหรือผิด นี่คือจุดเริ่มต้นของเกมของเราครับ
ข้อควรจำ: ค่าที่ได้รับจาก `input()` แม้ว่าจะป้อนเป็นตัวเลข แต่จะถูกจัดการเป็น "สตริง" (string) เสมอ ดังนั้น ก่อนที่จะนำไปเปรียบเทียบหรือคำนวณเป็นตัวเลข จะต้องใช้ `int()` เพื่อแปลงให้เป็น "จำนวนเต็ม" (integer) ก่อน ซึ่งกระบวนการนี้เรียกว่า "การแปลงชนิดข้อมูล (type casting)" ครับ
ขั้นตอนที่ 2: ทำให้เกมสามารถ "เล่นซ้ำ" ได้ (การใช้ลูป `while`)
ด้วยโค้ดปัจจุบัน พอทายไปหนึ่งครั้งเกมก็จะจบลงทันที แบบนี้ไม่เรียกว่าเกมใช่ไหมครับ เรามาปรับปรุงให้สามารถทายซ้ำๆ ได้จนกว่าจะถูกกันเถอะ
ทำไมต้องใช้ลูป?
เมื่อต้องการทำกระบวนการเดิมซ้ำๆ หลายครั้ง ในการเขียนโปรแกรมเราจะใช้โครงสร้างที่เรียกว่า "ลูป (loop)" ครับ Python มีลูป `for` และลูป `while` แต่ในครั้งนี้เราจะใช้ลูป `while` ซึ่งเหมาะสำหรับ "การทำซ้ำจนกว่าเงื่อนไขที่กำหนดจะสำเร็จ"
ปรับปรุงด้วยลูป `while`!
เงื่อนไข "จนกว่าจะตอบถูก" พูดอีกอย่างก็คือ "ทำซ้ำไปเรื่อยๆ ตราบใดที่ยังไม่ถูก" การใช้ `while` กับเงื่อนไขนี้จะทำให้โค้ดดูเป็นเกมมากขึ้น
ครั้งนี้เราจะใช้การเขียนแบบ `while True:` ซึ่งหมายถึง "ทำซ้ำไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด" แต่ไม่ต้องกังวลครับ เราสามารถใช้คำสั่ง `break` จากภายในลูปเพื่อออกจากลูปได้ในเวลาที่ต้องการ
import random
answer = random.randint(1, 100)
print("ทายตัวเลขตั้งแต่ 1 ถึง 100!")
# เริ่มลูปไม่สิ้นสุด
while True:
guess_str = input("การทายของคุณ: ")
guess = int(guess_str)
if guess == answer:
print("🎉 ถูกต้อง! ขอแสดงความยินดี!")
break # ถ้าตอบถูก ให้ออกจากลูป
else:
print("น่าเสียดาย! ลองอีกครั้งนะ")
เป็นอย่างไรบ้างครับ? เมื่อรันโค้ด คุณจะสามารถป้อนค่าที่ทายได้เรื่อยๆ จนกว่าจะตอบถูก ถ้าไม่มี `break` โปรแกรมจะไม่จบแม้ว่าจะตอบถูกแล้วก็ตาม ให้จำไว้ว่า `while True:` กับ `break` ต้องใช้คู่กันนะครับ
ขั้นตอนที่ 3: ทำให้เกมเป็นมิตรมากขึ้น (ฟังก์ชันบอกใบ้)
ในตอนนี้ โปรแกรมจะบอกแค่ว่า "น่าเสียดาย!" เท่านั้น ทำให้ไม่รู้เลยว่าครั้งต่อไปควรจะใส่ตัวเลขอะไรดี เรามาเพิ่มฟังก์ชันบอกใบ้เพื่อให้ผู้เล่นสนุกขึ้นกันเถอะครับ
คำใบ้ที่บอกว่า "ใหญ่กว่า" หรือ "เล็กกว่า"
ในกรณีที่ทายผิด การบอกผู้เล่นว่าตัวเลขที่ป้อนเข้ามานั้น "ใหญ่กว่า" หรือ "เล็กกว่า" คำตอบ จะทำให้เกมสนุกขึ้นอย่างมาก ซึ่งสามารถทำได้ง่ายๆ โดยการเพิ่ม `elif` (ย่อมาจาก else if) เข้าไปในคำสั่ง `if`
มานับจำนวนครั้งที่ทายกันเถอะ
นอกจากนี้ การบันทึกว่าทายถูกในกี่ครั้งและแสดงผลในตอนท้ายจะช่วยสร้างความรู้สึกถึงความสำเร็จได้ เราจะเตรียมตัวแปรสำหรับนับจำนวนครั้ง เช่น `count = 0` ก่อนที่ลูปจะเริ่ม และเพิ่มค่าทีละ 1 ด้วย `count += 1` ทุกครั้งที่ทำการทาย
import random
answer = random.randint(1, 100)
count = 0 # khởi tạo biến đếm số lần
print("ทายตัวเลขตั้งแต่ 1 ถึง 100!")
while True:
guess_str = input("การทายของคุณ: ")
guess = int(guess_str)
count += 1 # เพิ่มตัวนับทีละ 1 ทุกครั้งที่ทาย
if guess < answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องใหญ่กว่านี้ (จำนวนครั้งที่ทาย: {count})")
elif guess > answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องเล็กกว่านี้ (จำนวนครั้งที่ทาย: {count})")
else: # กรณีที่ guess == answer
print(f"\n🎉 ถูกต้อง! ขอแสดงความยินดี!")
print(f"ตัวเลขที่ถูกต้องคือ {answer}")
print(f"คุณทายถูกใน {count} ครั้ง!")
break
ตอนนี้มีคำใบ้และจำนวนครั้งที่ทายแสดงขึ้นมาแล้ว ทำให้ดูเป็นเกมมากขึ้นเยอะเลยใช่ไหมครับ! การใช้ `f-string` ของ Python (การเขียนโดยใส่ `f` ไว้หน้าสตริง) จะช่วยให้สามารถแทรกค่าของตัวแปรเข้าไปในสตริงได้อย่างง่ายดายด้วยรูปแบบ `{ชื่อตัวแปร}` ซึ่งสะดวกมากครับ
ขั้นตอนที่ 4: สู่โปรแกรมที่ทนทานต่อข้อผิดพลาด (จุดสำคัญและสร้างความแตกต่าง)
เอาล่ะครับ จากนี้ไปคือส่วนที่สำคัญที่สุดของบทความนี้ ในโค้ดปัจจุบันของเรามี "จุดอ่อน" ซ่อนอยู่ นั่นคือ เมื่อผู้เล่นป้อนข้อมูลที่ไม่ใช่ตัวเลข โปรแกรมจะถูกบังคับให้ปิดตัวลง
กับดัก `ValueError` ที่มือใหม่ทุกคนต้องเจอ
ลองรันโค้ดก่อนหน้านี้ แล้วในตอนที่ต้องทายตัวเลข ลองป้อนตัวอักษรอย่าง "abc" หรือ "สวัสดี" ดูสิครับ
`ValueError: invalid literal for int() with base 10: 'abc'`
คุณน่าจะเห็นข้อความแสดงข้อผิดพลาดสีแดงแบบนี้ปรากฏขึ้นมา แล้วโปรแกรมก็หยุดทำงานใช่ไหมครับ นี่เป็นเพราะฟังก์ชัน `int()` มีไว้สำหรับ "แปลงสตริงเป็นจำนวนเต็ม" แต่กลับได้รับอักขระที่ไม่สามารถแปลงได้ (เช่น 'abc') เข้าไป ทำให้เกิดข้อผิดพลาดขึ้น
นี่เป็นกำแพงที่ผมเจอมานับครั้งไม่ถ้วนตอนเป็นมือใหม่ครับ โปรแกรมที่ "บนคอมของตัวเองทำงานได้ดี แต่พอคนอื่นใช้กลับเจ๊งทันที..." น่าเสียดายที่ไม่สามารถเรียกได้ว่าเป็น "โปรแกรมที่ดี" เรามาตั้งเป้าที่จะสร้างโปรแกรมที่ "แข็งแกร่ง (robust)" ที่ไม่พังง่ายๆ แม้ว่าผู้ใช้จะป้อนข้อมูลผิดพลาดก็ตาม
ดักจับข้อผิดพลาดด้วย `try-except`!
โครงสร้างคำสั่งมหัศจรรย์ที่จะช่วยแก้ปัญหา `ValueError` นี้ได้ก็คือ `try-except` ครับ
- บล็อก `try:`: เขียนโค้ดที่อาจจะเกิดข้อผิดพลาดไว้ในนี้ เหมือนกับจะบอกว่า "ลองทำอันนี้ดูสิ!"
- บล็อก `except ประเภทข้อผิดพลาด:`: ถ้าหากเกิดข้อผิดพลาดประเภทที่ระบุไว้ใน `try` ขึ้นมา ก็จะมาทำงานในส่วนนี้แทน เหมือนกับจะบอกว่า "ถ้าเกิดข้อผิดพลาดขึ้นมา ก็ให้ทำอันนี้แทนนะ"
เราจะใช้โครงสร้างนี้ครอบการประมวลผลการแปลงข้อมูลด้วย `int()` ด้วยบล็อก `try` และเขียนการจัดการกรณีที่เกิด `ValueError` ไว้ในบล็อก `except` เพื่อป้องกันไม่ให้โปรแกรมปิดตัวลงจากข้อผิดพลาด
import random
answer = random.randint(1, 100)
count = 0
print("ทายตัวเลขตั้งแต่ 1 ถึง 100!")
while True:
guess_str = input("การทายของคุณ: ")
try:
# โค้ดที่อาจเกิดข้อผิดพลาดได้
guess = int(guess_str)
count += 1
if guess < answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องใหญ่กว่านี้ (จำนวนครั้งที่ทาย: {count})")
elif guess > answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องเล็กกว่านี้ (จำนวนครั้งที่ทาย: {count})")
else:
print(f"\n🎉 ถูกต้อง! ขอแสดงความยินดี!")
print(f"ตัวเลขที่ถูกต้องคือ {answer}")
print(f"คุณทายถูกใน {count} ครั้ง!")
break
except ValueError:
# โค้ดที่จะทำงานเมื่อเกิด ValueError
print("ข้อผิดพลาด: กรุณาใส่ตัวเลขเท่านั้น ห้ามใช้อักขระหรือสัญลักษณ์")
ลองรันโค้ดนี้แล้วป้อน "abc" อีกครั้งดูนะครับ ครั้งนี้โปรแกรมจะไม่หยุดทำงานเพราะข้อผิดพลาด แต่จะแสดงข้อความว่า "ข้อผิดพลาด: กรุณาใส่ตัวเลขเท่านั้น" แล้วให้คุณป้อนข้อมูลอีกครั้ง
การใช้ `try-except` ได้อย่างคล่องแคล่วถือเป็นก้าวสำคัญที่จะทำให้คุณหลุดพ้นจากความเป็นมือใหม่ได้ครับ!
[คอลัมน์] วิธีขอให้ AI ช่วยแก้ปัญหาข้อผิดพลาด
ตอนที่ผมกำลังเรียนเขียนโปรแกรม คนที่ผมพึ่งพามากที่สุดก็คือ AI ครับ เวลาเจอข้อผิดพลาดอย่าง `ValueError` ผมจะคัดลอกข้อความแสดงข้อผิดพลาดทั้งหมดไปถาม AI (ในกรณีของผมคือ Gemini หรือ ChatGPT) แบบนี้ครับ
"ผมกำลังฝึกเขียนโปรแกรมด้วย Python อยู่ครับ โปรแกรมของผมหยุดทำงานและแสดงข้อความแสดงข้อผิดพลาดด้านล่างนี้ ข้อผิดพลาดนี้เกิดจากอะไรครับ? และผมจะแก้ไขโค้ดอย่างไรเพื่อให้โปรแกรมไม่หยุดทำงานแม้ว่าจะเกิดข้อผิดพลาดนี้ขึ้น? ช่วยอธิบายให้เข้าใจง่ายสำหรับมือใหม่ด้วยครับ"
`ValueError: invalid literal for int() with base 10: 'abc'`
แล้ว AI ก็จะเสนอวิธีแก้ปัญหาโดยใช้ `try-except` มาให้แทบจะร้อยเปอร์เซ็นต์เลยครับ การไม่กลัวข้อความแสดงข้อผิดพลาดและใช้มันเป็น "คำถาม" ไปถาม AI คือเคล็ดลับที่ดีที่สุดที่จะช่วยเร่งการเรียนรู้ด้วยตนเองครับ
ขั้นตอนที่ 5: ทำให้สนุกยิ่งขึ้น! (ภาคประยุกต์)
เมื่อเราได้ติดตั้งฟังก์ชันพื้นฐานและการจัดการข้อผิดพลาดเรียบร้อยแล้ว สุดท้ายเรามาเพิ่มฟังก์ชันอีกเล็กน้อยเพื่อทำให้เกมมีความสมบูรณ์ยิ่งขึ้นกันเถอะครับ ส่วนนี้จะเป็นการอธิบายเนื้อหาที่อยู่ในโค้ดเวอร์ชันสมบูรณ์ที่แสดงไว้ตอนต้นบทความ
ทำให้สามารถเลือกระดับความยากได้
การที่ต้องทายตัวเลขตั้งแต่ 1 ถึง 100 ทุกครั้งอาจจะน่าเบื่อได้ การทำให้ผู้เล่นสามารถเลือกช่วงของตัวเลขได้ตอนเริ่มเกม เช่น "ง่าย (1-10)", "ปานกลาง (1-100)", "ยาก (1-1000)" จะทำให้ผู้เล่นอยากกลับมาเล่นซ้ำอีก
ซึ่งสามารถทำได้โดยการเพิ่มลูปสำหรับเลือกระดับความยากไว้ก่อนลูปหลักของเกม แล้วก็แค่เปลี่ยนค่าต่ำสุด (`min_num`) และค่าสูงสุด (`max_num`) ที่จะส่งให้กับ `random.randint()` ตามที่ผู้เล่นป้อนเข้ามาก็เรียบร้อยครับ
ทำให้สามารถเล่นอีกครั้งได้
การต้องรันโปรแกรมใหม่ทุกครั้งที่เกมจบหนึ่งรอบอาจจะยุ่งยากไปหน่อย หลังจากทายถูกแล้ว เรามาถามว่า "เล่นอีกครั้งหรือไม่? (ใช่ / ไม่)" แล้วถ้าตอบ "ใช่" ก็ให้เริ่มเกมใหม่ทั้งหมด แต่ถ้าตอบ "ไม่" ก็ให้จบโปรแกรมกันเถอะครับ
วิธีที่จะทำเช่นนี้ได้ง่ายที่สุดคือการครอบลอจิกทั้งหมดของเกมที่เราสร้างมาจนถึงตอนนี้ด้วยลูป `while` ที่ใหญ่ขึ้นอีกชั้นหนึ่ง จากนั้นหลังจากเกมจบก็ให้ยืนยันความต้องการที่จะเล่นอีกครั้ง ถ้าหากคำตอบคือ "ไม่" ก็ให้ใช้ `break` เพื่อออกจากลูปใหญ่และจบโปรแกรมโดยสมบูรณ์
"โค้ดเวอร์ชันสมบูรณ์" ที่แนะนำไว้ตอนต้นบทความก็คือโค้ดที่รวมฟังก์ชันทั้งหมดนี้ไว้นั่นเองครับ ลองกลับไปดูโค้ดอีกครั้งแล้วตรวจสอบดูว่าส่วนไหนทำงานกับฟังก์ชันไหนนะครับ
สรุป: มาสัมผัสความสนุกของการสร้างสิ่งที่ทำงานได้จริงกันเถอะ!
เหนื่อยหน่อยนะครับ! ในครั้งนี้เราได้สัมผัสประสบการณ์การสร้างเกมทายตัวเลขง่ายๆ ด้วย Python ตั้งแต่ศูนย์
ผ่านบทความนี้ คุณได้สัมผัสกับองค์ประกอบพื้นฐานที่สำคัญของ Python ดังต่อไปนี้:
- `import`: การนำเข้าโมดูล
- `random.randint()`: การสร้างจำนวนเต็มแบบสุ่ม
- `input()`: การรับค่าที่ป้อนจากคีย์บอร์ดของผู้ใช้
- `int()`: การแปลงชนิดข้อมูลจากสตริงเป็นจำนวนเต็ม
- `print()` (f-string): การแสดงผลลัพธ์และข้อความบนหน้าจอ
- `if/elif/else`: การแยกการทำงานตามเงื่อนไข
- ลูป `while` (`break`): การทำซ้ำและการออกจากกระบวนการ
- `try-except`: การจัดการข้อผิดพลาด
การเรียนเขียนโปรแกรมนั้น การได้ลองสร้าง "สิ่งที่ทำงานได้จริง" ถือเป็นทางลัดที่ดีที่สุดในการพัฒนาฝีมือ มากกว่าการท่องจำไวยากรณ์เพียงอย่างเดียว ประสบการณ์ความสำเร็จเล็กๆ น้อยๆ จะเป็นแรงจูงใจที่ยิ่งใหญ่สำหรับการเรียนรู้ในขั้นต่อไป
ลองดัดแปลงโค้ดที่เราสร้างขึ้นในครั้งนี้ เช่น "จำกัดจำนวนครั้งในการทาย" หรือ "ทำให้คำใบ้ละเอียดขึ้น" เพื่อสร้างเกมในแบบฉบับของตัวเองก็น่าสนใจไม่น้อยเลยนะครับ หวังว่าคุณจะใช้บทความนี้เป็นก้าวแรกในการเรียนเขียนโปรแกรมของคุณ
ก้าวต่อไป
เมื่อคุณคุ้นเคยกับการเขียนโปรแกรมพื้นฐานแล้ว ต่อไปลองท้าทายกับการประมวลผลภาพดูไหมครับ? ด้วยการใช้ไลบรารีของ Python ที่ชื่อว่า "Pillow" คุณสามารถสร้างเครื่องมือที่มีประโยชน์อย่างการปรับขนาดรูปภาพจำนวนมากในพริบตาได้อย่างง่ายดาย
➡️ บทความถัดไป: มาสร้างเครื่องมือปรับขนาดรูปภาพทั้งหมดในครั้งเดียวด้วย Python กันเถอะ (Pillow)
[สรุป] เกี่ยวกับตัวอย่าง HTML ที่ทำงานได้อย่างสมบูรณ์
ส่วนนี้คือตัวอย่าง HTML ที่คุณสามารถคัดลอกและวางไปใช้ได้เมื่อต้องการเผยแพร่เนื้อหาอย่างบทความบล็อกนี้บนเว็บไซต์ของคุณเอง
โค้ดด้านล่างนี้มีเนื้อหาทั้งหมดของบทความนี้ (หัวข้อ, ข้อความ, บล็อกโค้ด ฯลฯ) รวมอยู่ด้วย อย่างไรก็ตาม โค้ด Python เองนั้นถูกตั้งสมมติฐานว่าจะถูกรันบนสภาพแวดล้อมการรัน Python บนคอมพิวเตอร์ของผู้อ่าน (เช่น เทอร์มินัลหรือคอมมานด์พรอมต์)
ข้อควรระวัง: โค้ด HTML ภายในบล็อกโค้ดด้านล่างนี้ได้ผ่านการ escape อักขระพิเศษ (เช่น `<` ถูกแปลงเป็น `<`) เพื่อให้แสดงผลบนหน้าเว็บได้อย่างถูกต้อง
<article>
<h1 style="color: #669df6;">[คัดลอกและวางเพื่อใช้งานได้เลย!] คู่มือสร้างเกมทายตัวเลขด้วย Python สำหรับมือใหม่: บันทึกของมือใหม่ที่ก้าวผ่านมาได้ด้วย AI</h1>
<p>
สวัสดีครับ! ยินดีต้อนรับสู่โลกแห่งการเขียนโปรแกรม
</p>
<p>
เมื่อไม่กี่เดือนก่อน ผมก็เหมือนกับทุกๆ คน คือไม่มีความรู้ด้านโปรแกรมมิ่งเลยแม้แต่น้อย ไม่รู้ว่าจะเริ่มจากตรงไหนดี และต้องปวดหัวทุกครั้งที่เจอกับข้อผิดพลาด... แต่ด้วยความช่วยเหลือจาก AI และการลองผิดลองถูกนับครั้งไม่ถ้วน ตอนนี้ผมสามารถสร้างเว็บไซต์ 2 แห่ง (<a href="https://buyonjapan.com" target="_blank" rel="noopener noreferrer" style="color: #8ab4f8;">buyonjapan.com</a>, <a href="https://copicode.com" target="_blank" rel="noopener noreferrer" style="color: #8ab4f8;">copicode.com</a>) ได้ด้วยตัวเองแล้วครับ
</p>
<p>
ในเว็บไซต์นี้ ผมจะอธิบายถึง "สิ่งที่ผมอยากรู้จริงๆ" "จุดที่ผมติดขัดจริงๆ" และ "ผมแก้ไขมันได้อย่างไร" ในระหว่างเส้นทางนั้น โดยจะพยายามใช้ศัพท์เทคนิคให้น้อยที่สุดและอธิบายใน "มุมมองของมือใหม่เช่นเดียวกัน" ครับ
</p>
<p>
ในครั้งนี้ เราจะมาสร้าง "<strong>เกมทายตัวเลข</strong>" ด้วย Python ซึ่งเป็นก้าวแรกที่นิยมมากในการเรียนเขียนโปรแกรม วัตถุประสงค์ของบทความนี้มีเพียงหนึ่งเดียวคือ "<strong>การนำเสนอโค้ดที่สามารถทำงานได้อย่างสมบูรณ์เพียงแค่คัดลอกและวาง เพื่อให้คุณได้สัมผัสกับประสบการณ์ความสำเร็จจากการที่ 'มันทำงานได้'</strong>" ครับ
</p>
<p>
เรามาสัมผัสความสนุกของการเขียนโปรแกรมไปด้วยกันเถอะครับ!
</p>
<hr style="margin: 4rem 0;">
<h2 style="color: #669df6;">มาลองสัมผัสเวอร์ชันสมบูรณ์กันก่อน! โค้ดทั้งหมดที่คัดลอกไปใช้ได้เลย</h2>
<p>
สิบปากว่าไม่เท่าตาเห็น ก่อนอื่น ผมจะให้ดูโค้ดเวอร์ชันสมบูรณ์ของเกมทายตัวเลขที่เราจะสร้างไปด้วยกัน ลองคัดลอกโค้ดทั้งหมดด้านล่างไปรันในสภาพแวดล้อมของคุณ (เช่น VSCode หรือ Google Colaboratory) ดูนะครับ การได้ลองเล่นและสัมผัสด้วยตัวเองว่าเป็นเกมแบบไหน คือวิธีที่เร็วที่สุดในการทำความเข้าใจครับ!
</p>
<div class="code-wrapper">
<button class="copy-btn" data-target="code-block-1">📋 คัดลอก</button>
<pre><code id="code-block-1">
import random
def number_guessing_game():
while True:
print("\n--- เกมทายตัวเลข ---")
print("กรุณาเลือกระดับความยาก:")
print("1: ง่าย (1-10)")
print("2: ปานกลาง (1-100)")
print("3: ยาก (1-1000)")
level = input("กรุณาใส่ระดับความยาก (1, 2, 3): ")
if level == '1':
min_num, max_num = 1, 10
elif level == '2':
min_num, max_num = 1, 100
elif level == '3':
min_num, max_num = 1, 1000
else:
print("การเลือกไม่ถูกต้อง กรุณาใส่ '1', '2' หรือ '3'")
continue
answer = random.randint(min_num, max_num)
count = 0
print(f"\nทายตัวเลขระหว่าง {min_num} ถึง {max_num}!")
while True:
try:
guess_str = input(f"การทายของคุณ (จำนวนครั้งที่เหลือ: ไม่จำกัด): ")
guess = int(guess_str)
count += 1
if guess < min_num or guess > max_num:
print(f"อยู่นอกขอบเขต! กรุณาใส่ตัวเลขระหว่าง {min_num} ถึง {max_num}")
elif guess < answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องใหญ่กว่านี้ (จำนวนครั้งที่ทาย: {count})")
elif guess > answer:
print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องเล็กกว่านี้ (จำนวนครั้งที่ทาย: {count})")
else:
print(f"\n🎉🎉🎉 ถูกต้อง! ขอแสดงความยินดีด้วย! 🎉🎉🎉")
print(f"ตัวเลขที่ถูกต้องคือ {answer}")
print(f"คุณใช้จำนวนครั้งในการทาย {count} ครั้ง")
break
except ValueError:
print("ข้อผิดพลาด: กรุณาใส่ตัวเลขเท่านั้น ห้ามใช้อักขระหรือสัญลักษณ์")
while True:
replay = input("\nเล่นอีกครั้งหรือไม่? (ใช่ / ไม่): ").lower()
if replay in ["ใช่", "ไม่"]:
break
else:
print("การป้อนข้อมูลไม่ถูกต้อง กรุณาใส่ 'ใช่' หรือ 'ไม่'")
if replay == "ไม่":
print("ขอบคุณที่มาเล่น! แล้วเจอกันใหม่นะ!")
break
# เริ่มเกม
number_guessing_game()
</code></pre>
</div>
<p>
เป็นอย่างไรบ้างครับ? คงจะเป็นเกมง่ายๆ ที่ให้ทายตัวเลขที่คอมพิวเตอร์คิดขึ้นมาใช่ไหมครับ จากส่วนถัดไป เราจะมาแยกส่วนประกอบของโค้ดนี้ทีละชิ้น และสร้างมันขึ้นมาจากศูนย์กันครับ
</p>
<!-- แต่ละส่วนจะดำเนินต่อไปในทำนองเดียวกัน -->
</article>