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

[คัดลอกและวางเพื่อใช้งานได้เลย!] คู่มือสร้างเกมทายตัวเลขด้วย 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 ขั้นตอนดังนี้ครับ

  1. ทำให้สามารถใช้โมดูล `random` ได้ (`import`)
  2. สร้างตัวเลขคำตอบแบบสุ่มตั้งแต่ 1 ถึง 100
  3. ให้ผู้เล่นป้อนค่าที่ทาย (`input`)
  4. เปรียบเทียบคำตอบกับค่าที่ทาย แล้วแสดงผลลัพธ์ (`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` ครับ

เราจะใช้โครงสร้างนี้ครอบการประมวลผลการแปลงข้อมูลด้วย `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 ดังต่อไปนี้:

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

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

ก้าวต่อไป

เมื่อคุณคุ้นเคยกับการเขียนโปรแกรมพื้นฐานแล้ว ต่อไปลองท้าทายกับการประมวลผลภาพดูไหมครับ? ด้วยการใช้ไลบรารีของ 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 &lt; min_num or guess &gt; max_num:
          print(f"อยู่นอกขอบเขต! กรุณาใส่ตัวเลขระหว่าง {min_num} ถึง {max_num}")
        elif guess &lt; answer:
          print(f"น่าเสียดาย! ตัวเลขที่ถูกต้องใหญ่กว่านี้ (จำนวนครั้งที่ทาย: {count})")
        elif guess &gt; 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>