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



พอเขียนโปรแกรมเป็นแล้ว สิ่งที่อยากทำต่อมาคือให้โปรแกรม “คุย” กับคนได้ ไม่ใช่แค่รันแล้วแสดงผลลัพธ์เดิมทุกครั้ง ตัวที่ทำหน้าที่นี้ใน Python คือฟังก์ชัน input()

input() ทำงานยังไง

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

name = input("คุณชื่ออะไร: ")
print("สวัสดีครับคุณ", name)

ผลลัพธ์ (บรรทัดแรกคือสิ่งที่เราพิมพ์เอง):

คุณชื่ออะไร: สมชาย
สวัสดีครับคุณ สมชาย

ข้อความที่ใส่ในวงเล็บ ("คุณชื่ออะไร: ") เรียกว่า prompt เป็นแค่ข้อความบอกใบ้ให้คนใช้รู้ว่าต้องกรอกอะไร จะใส่หรือไม่ใส่ก็ได้ แต่ใส่ไว้จะเป็นมิตรกับคนใช้มากกว่า

เรื่องที่คนมักพลาด: input() คืนค่าเป็นข้อความเสมอ

จุดนี้สำคัญมาก ไม่ว่าคุณจะพิมพ์ตัวเลขลงไปแค่ไหน input() จะมองเป็นข้อความ (string) ทั้งหมด

age = input("อายุเท่าไหร่: ")
print(age + 1)

โค้ดนี้พังทันที เพราะเราพยายามเอาข้อความ "20" มาบวกกับตัวเลข 1

TypeError: can only concatenate str (not "int") to str

ทางแก้คือแปลงชนิดข้อมูลก่อนใช้ ถ้าอยากได้จำนวนเต็มใช้ int() ถ้าอยากได้ทศนิยมใช้ float()

age = int(input("อายุเท่าไหร่: "))
print("ปีหน้าคุณจะอายุ", age + 1)

ผลลัพธ์:

อายุเท่าไหร่: 20
ปีหน้าคุณจะอายุ 21

รับหลายค่าในบรรทัดเดียว

บางครั้งเราอยากให้คนใช้กรอกหลายค่ารวดเดียว เช่น กรอกตัวเลขสองตัวคั่นด้วยเว้นวรรค ใช้ split() ช่วยตัดข้อความออกเป็นส่วน ๆ

a, b = input("กรอกเลขสองตัว คั่นด้วยเว้นวรรค: ").split()
a = int(a)
b = int(b)
print("ผลบวก =", a + b)

ผลลัพธ์:

กรอกเลขสองตัว คั่นด้วยเว้นวรรค: 7 5
ผลบวก = 12

ถ้าอยากเขียนสั้นลง แปลงทุกตัวพร้อมกันด้วย map() ได้

a, b = map(int, input("กรอกเลขสองตัว: ").split())
print("ผลคูณ =", a * b)

ตัวอย่างรวม: โปรแกรมคำนวณพื้นที่สี่เหลี่ยม

print("=== คำนวณพื้นที่สี่เหลี่ยมผืนผ้า ===")
width = float(input("ความกว้าง (เมตร): "))
height = float(input("ความยาว (เมตร): "))

area = width * height
print("พื้นที่ =", area, "ตารางเมตร")

ผลลัพธ์:

=== คำนวณพื้นที่สี่เหลี่ยมผืนผ้า ===
ความกว้าง (เมตร): 3.5
ความยาว (เมตร): 4
พื้นที่ = 14.0 ตารางเมตร

สรุป

  • input() ใช้รับข้อความจากคนใช้ โปรแกรมจะหยุดรอจนกว่าจะกด Enter
  • ค่าที่ได้เป็น string เสมอ ถ้าจะเอาไปคำนวณต้องแปลงด้วย int() หรือ float() ก่อน
  • split() ช่วยแยกข้อความหลายค่าในบรรทัดเดียว จับคู่กับ map() เพื่อแปลงชนิดทีเดียวได้

บทถัดไปเราจะไปดูตัวดำเนินการ (operators) ว่ามีอะไรบ้าง เพื่อเอาค่าที่รับเข้ามาไปคำนวณต่อ