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

รับข้อมูล & แสดงผล (Input & Output)

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

คุยกับผู้ใช้ผ่าน input() และ print() พร้อม f-string สำหรับจัดรูปข้อความให้สวยงาม

โปรแกรมที่มีประโยชน์ต้องรับข้อมูลเข้าและแสดงผลออก หัวข้อนี้เจาะ input() กับ print() ให้ลึก รวมถึง f-string ซึ่งเป็นวิธีจัดรูปข้อความที่ใช้บ่อยที่สุดในงานจริง

แสดงผลด้วย print()

python
print("Hello")              # Hello
print("a", "b", "c")        # a b c   (คั่นด้วยช่องว่างอัตโนมัติ)
print("a", "b", sep="-")    # a-b     (เปลี่ยนตัวคั่นด้วย sep)
print("ไม่ขึ้นบรรทัดใหม่", end=" ")  # คุม end (ปกติคือขึ้นบรรทัดใหม่)
print("ต่อท้ายเลย")          # ไม่ขึ้นบรรทัดใหม่ ต่อท้ายเลย

f-string — วิธีจัดรูปข้อความที่ดีที่สุด

f-string คือใส่ตัว f นำหน้าเครื่องหมายคำพูด แล้ววางตัวแปรไว้ในวงเล็บปีกกา {} Python จะแทนค่าให้อัตโนมัติ อ่านง่ายและทรงพลังมาก

python
name = "Aphisit"
age = 25
print(f"สวัสดี {name} อายุ {age} ปี")
# สวัสดี Aphisit อายุ 25 ปี

# คำนวณในวงเล็บได้เลย
print(f"ปีหน้าอายุ {age + 1} ปี")   # ปีหน้าอายุ 26 ปี

# จัดรูปทศนิยม: :.2f = 2 ตำแหน่ง
pi = 3.14159
print(f"ค่า pi = {pi:.2f}")          # ค่า pi = 3.14

# จัดความกว้าง/หลักพัน
price = 1234567
print(f"ราคา {price:,} บาท")          # ราคา 1,234,567 บาท
ทำไมต้อง f-string

วิธีเก่าใช้ + ต่อข้อความ เช่น "อายุ " + str(age) + " ปี" ซึ่งต้องแปลงชนิดเองและอ่านยาก f-string สั้นกว่า ปลอดภัยกว่า และเป็นมาตรฐานที่ใช้กันทั่วไปในโค้ดสมัยใหม่

รับข้อมูลด้วย input()

input() หยุดรอให้ผู้ใช้พิมพ์แล้วกด Enter ค่าที่ได้เป็นข้อความ (str) เสมอ — แม้ผู้ใช้พิมพ์ตัวเลข ถ้าจะคำนวณต้องแปลงชนิดก่อน

python
name = input("คุณชื่ออะไร: ")        # ได้เป็น str
age = int(input("อายุเท่าไหร่: "))   # รับแล้วแปลงเป็น int ทันที
height = float(input("สูงกี่เมตร: "))# แปลงเป็น float

print(f"สวัสดี {name}")
print(f"อีก 10 ปีคุณจะอายุ {age + 10} ปี")
input() ได้ str เสมอ — จำให้ขึ้นใจ

ถ้าลืมครอบ int() แล้วเอาไปบวก จะกลายเป็นการต่อข้อความ หรือถ้าเทียบ age > 18 โดย age เป็น str จะ error ติดนิสัยครอบ int()/float() ตั้งแต่ตอนรับเลย

ตัวอย่างรวม: โปรแกรมคำนวณ BMI

python
print("=== คำนวณ BMI ===")
weight = float(input("น้ำหนัก (กก.): "))
height = float(input("ส่วนสูง (เมตร): "))

bmi = weight / (height ** 2)
print(f"ค่า BMI ของคุณคือ {bmi:.1f}")
# ถ้าใส่ 60 และ 1.70 -> ค่า BMI ของคุณคือ 20.8

รับหลายค่าในบรรทัดเดียว (split / map)

บ่อยครั้งผู้ใช้พิมพ์หลายค่าคั่นด้วยช่องว่างในบรรทัดเดียว — ใช้ .split() หั่นเป็นลิสต์ แล้ว map() แปลงชนิดทีเดียว เทคนิคนี้เจอบ่อยมากเวลาแก้โจทย์/รับ input หลายค่า

python
# ผู้ใช้พิมพ์:  10 20 30
parts = input("ใส่เลขคั่นด้วยช่องว่าง: ").split()   # ['10','20','30']
nums = [int(x) for x in parts]                       # [10, 20, 30]
print(sum(nums))                                     # 60

# รับ 2 ค่าแยกตัวแปรในบรรทัดเดียว
a, b = input("ใส่ 2 เลข: ").split()
a, b = int(a), int(b)
print(a + b)

# สั้นสุดด้วย map
x, y = map(int, input().split())   # แปลงทุกตัวเป็น int พร้อมแยกตัวแปร

สรุปหัวข้อนี้

  • print() แสดงผล ปรับ sep และ end ได้
  • f-string (f"...{ตัวแปร}...") คือวิธีจัดรูปข้อความที่ดีที่สุด — คำนวณและจัดรูปทศนิยม/หลักพันได้
  • input() รับข้อความจากผู้ใช้ ได้เป็น str เสมอ ต้องแปลงชนิดก่อนคำนวณ
แบบฝึกหัด

1) รับชื่อและปีเกิด แล้ว print อายุโดยประมาณด้วย f-string 2) รับราคาสินค้าและจำนวน แล้วแสดงราคารวมแบบมีหลักพัน (:,) 3) เขียนโปรแกรมคำนวณพื้นที่สามเหลี่ยมจากฐานและสูง แสดงผลทศนิยม 2 ตำแหน่ง