Notes & software courses · Free to learn
Aph's Blog
On this page

โจทย์พื้นฐาน (ตัวแปร / เงื่อนไข / loop)

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

วอร์มอัพด้วยโจทย์ที่ใช้ความรู้พื้นฐานตรง ๆ — ลองทำเองก่อนเปิดเฉลยทุกข้อ

โจทย์ชุดนี้ฝึกตรรกะพื้นฐาน: รับค่า ตัดสินใจ และวนซ้ำ ถ้าทำชุดนี้คล่องแล้วค่อยไปหัวข้อถัดไป แนะนำเปิด replit.com แล้วพิมพ์เอง

ข้อ 1 — เลขคู่หรือคี่ 🟢

รับจำนวนเต็มจากผู้ใช้ แล้วบอกว่าเป็นเลขคู่หรือเลขคี่

คำใบ้

เลขคู่คือเลขที่หารด้วย 2 ลงตัว (เศษเป็น 0) ใช้ตัวดำเนินการ % เช็คเศษ

เฉลย + คำอธิบาย
python
n = int(input("ใส่เลข: "))
if n % 2 == 0:
    print(f"{n} เป็นเลขคู่")
else:
    print(f"{n} เป็นเลขคี่")

หัวใจคือ n % 2 ให้เศษจากการหารด้วย 2 ถ้าเศษเป็น 0 แปลว่าหารลงตัว = เลขคู่ อย่าลืม int() เพราะ input() ให้ str

ข้อ 2 — มากที่สุดใน 3 ตัว 🟢

รับเลข 3 ตัว แล้วบอกว่าตัวไหนมากที่สุด (ลองทำทั้งแบบใช้ if และแบบใช้ max())

เฉลย + คำอธิบาย
python
a = int(input("a: "))
b = int(input("b: "))
c = int(input("c: "))

# แบบ if
biggest = a
if b > biggest:
    biggest = b
if c > biggest:
    biggest = c
print("มากสุด:", biggest)

# แบบสั้นด้วย max()
print("มากสุด:", max(a, b, c))

แบบ if: เริ่มสมมติ a มากสุด แล้วเทียบกับตัวอื่นทีละตัว ถ้าเจอที่มากกว่าก็อัปเดต เทคนิคนี้ (เก็บค่าที่ดีที่สุดไว้แล้วเทียบ) ใช้ได้กับการหาค่ามาก/น้อยในลิสต์ด้วย

ข้อ 3 — สูตรคูณ 🟢

รับเลข n แล้วพิมพ์สูตรคูณแม่ n ตั้งแต่ n×1 ถึง n×12 เช่น n=5 พิมพ์ 5 x 1 = 5 ... 5 x 12 = 60

เฉลย + คำอธิบาย
python
n = int(input("แม่สูตรคูณ: "))
for i in range(1, 13):       # 1 ถึง 12
    print(f"{n} x {i} = {n * i}")

range(1, 13) ให้ตัวเลข 1 ถึง 12 (ไม่รวม 13) แล้วใช้ f-string จัดรูปบรรทัดผลลัพธ์ นี่คือ pattern พื้นฐานของการวนพิมพ์ตาราง

ข้อ 4 — ผลรวมและค่าเฉลี่ยจนกว่าจะใส่ 0 🟡

รับตัวเลขไปเรื่อย ๆ จนกว่าผู้ใช้พิมพ์ 0 แล้วแสดงผลรวมและค่าเฉลี่ยของตัวเลขที่ใส่มา (ไม่นับ 0)

คำใบ้

ใช้ while loop ที่วนจนกว่าค่าที่รับจะเป็น 0 เก็บผลรวมและจำนวนตัวเลขไว้ในตัวแปร ระวัง edge case: ถ้าใส่ 0 ทันทีจะหารด้วยศูนย์!

เฉลย + คำอธิบาย
python
total = 0
count = 0
while True:
    n = int(input("ใส่เลข (0 เพื่อจบ): "))
    if n == 0:
        break
    total += n
    count += 1

if count == 0:
    print("ไม่ได้ใส่ตัวเลข")
else:
    print(f"ผลรวม {total}, เฉลี่ย {total / count:.2f}")

while True วนไม่รู้จบ แล้วใช้ break ออกเมื่อเจอ 0 — เป็น pattern ยอดนิยมของ "วนจนกว่าจะเจอเงื่อนไขหยุด" ส่วน if count == 0 คือ edge case กันหารด้วยศูนย์ การคิดถึงเคสนี้คือสิ่งที่แยกโค้ดดีออกจากโค้ดที่พัง

ข้อ 5 — แปลงเกรด 🟡

รับคะแนน 0–100 แล้วแปลงเป็นเกรด: 80+ = A, 70–79 = B, 60–69 = C, 50–59 = D, ต่ำกว่า 50 = F และถ้าคะแนนไม่อยู่ในช่วง 0–100 ให้แจ้งว่าไม่ถูกต้อง

เฉลย + คำอธิบาย
python
score = int(input("คะแนน: "))

if score < 0 or score > 100:
    print("คะแนนไม่ถูกต้อง")
elif score >= 80:
    print("A")
elif score >= 70:
    print("B")
elif score >= 60:
    print("C")
elif score >= 50:
    print("D")
else:
    print("F")

เช็คความถูกต้อง (validation) ก่อนเป็นอันดับแรก จากนั้นเรียงเงื่อนไขจากมากไปน้อย เพราะ elif หยุดที่อันแรกที่จริง ถ้าสลับลำดับผิด คนได้ 90 อาจได้เกรด D

ข้อ 6 — นับถอยหลังและสามเหลี่ยมดาว 🟡

รับเลข n แล้ว (ก) พิมพ์นับถอยหลังจาก n ถึง 1 (ข) พิมพ์สามเหลี่ยมดาว n แถว แถวที่ i มีดาว i ตัว

เฉลย + คำอธิบาย
python
n = int(input("n: "))

# (ก) นับถอยหลัง
for i in range(n, 0, -1):   # จาก n ถึง 1 ก้าวลงทีละ 1
    print(i)

# (ข) สามเหลี่ยมดาว
for i in range(1, n + 1):
    print("*" * i)          # "*" * 3 = '***'

range(n, 0, -1) นับถอยหลัง (เริ่ม n หยุดก่อน 0 ก้าว -1) ส่วน "*" * i ใช้คุณสมบัติว่าคูณ string ได้ = ทำซ้ำตัวอักษร เทคนิคเล็ก ๆ ที่ทำให้โค้ดสั้น

ทำครบแล้ว?

ลองดัดแปลงโจทย์เอง เช่น ข้อ 6 ทำสามเหลี่ยมกลับหัว หรือข้อ 5 เพิ่มเกรด A+ สำหรับ 90+ การคิดโจทย์เองคือการฝึกขั้นถัดไป