Python แปลงชนิดข้อมูล (Type Casting)
Python เป็นภาษาที่เข้มงวดเรื่องชนิดข้อมูลพอสมควร เอาข้อความไปบวกกับตัวเลขตรง ๆ ไม่ได้ เอาทศนิยมไปใช้ตรงที่ต้องการจำนวนเต็มก็ไม่ได้ การแปลงชนิดข้อมูลจึงเป็นเรื่องที่ต้องทำอยู่เรื่อย ๆ โดยเฉพาะตอนรับค่าจากผู้ใช้หรืออ่านจากไฟล์
ชนิดข้อมูลพื้นฐานที่ต้องรู้จัก
| ชนิด | ตัวอย่าง | ความหมาย |
|---|---|---|
int | 10, -3, 0 | จำนวนเต็ม |
float | 3.14, -0.5, 2.0 | จำนวนทศนิยม |
str | "สวัสดี", "123" | ข้อความ |
bool | True, False | ค่าจริง/เท็จ |
เช็คชนิดของค่าได้ด้วย type()
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hello")) # <class 'str'>
print(type(True)) # <class 'bool'>ฟังก์ชันแปลงชนิด
ชื่อฟังก์ชันตรงตัวกับชื่อชนิดข้อมูล
int() แปลงเป็นจำนวนเต็ม
print(int("25")) # 25
print(int(3.9)) # 3 (ตัดทศนิยมทิ้ง ไม่ปัด)
print(int(True)) # 1ข้อควรระวัง: int() แปลงข้อความที่เป็นทศนิยมไม่ได้
int("3.5") # ValueError!ถ้าข้อความเป็น "3.5" ต้องแปลงเป็น float ก่อน แล้วค่อยเป็น int
print(int(float("3.5"))) # 3float() แปลงเป็นทศนิยม
print(float("3.14")) # 3.14
print(float("10")) # 10.0
print(float(5)) # 5.0str() แปลงเป็นข้อความ
age = 25
print("อายุ " + str(age) + " ปี") # อายุ 25 ปีจริง ๆ ยุคนี้เราใช้ f-string แทนการต่อสตริงแบบนี้ แต่ก็ควรรู้ไว้ว่า str() ทำอะไร
bool() แปลงเป็นค่าจริง/เท็จ
ค่าที่ถือว่าเป็น “เท็จ” มีไม่กี่ตัว ได้แก่ 0, 0.0, "" (สตริงว่าง), None, และคอลเลกชันว่าง นอกนั้นเป็น “จริง” ทั้งหมด
print(bool(0)) # False
print(bool("")) # False
print(bool("0")) # True (เป็นสตริงที่ไม่ว่าง)
print(bool(42)) # True
print(bool(-1)) # Trueการแปลงชนิดอัตโนมัติ
บางกรณี Python แปลงให้เองเวลาคำนวณ เช่น เอา int บวก float ผลลัพธ์จะกลายเป็น float
result = 5 + 2.0
print(result) # 7.0
print(type(result)) # <class 'float'>แต่ระหว่าง str กับ int มันไม่แปลงให้ ต้องทำเอง
print("5" + 3) # TypeError
print(int("5") + 3) # 8จัดการ error เวลาแปลงไม่สำเร็จ
ถ้าผู้ใช้กรอกข้อความที่แปลงเป็นตัวเลขไม่ได้ โปรแกรมจะพัง เราจัดการได้ด้วย try / except (มีบทเจาะลึกภายหลัง ตอนนี้ดูรูปแบบไว้ก่อน)
raw = input("กรอกอายุ: ")
try:
age = int(raw)
print(f"ปีหน้าอายุ {age + 1}")
except ValueError:
print("กรุณากรอกเป็นตัวเลขเท่านั้น")ผลลัพธ์เมื่อกรอกผิด:
กรอกอายุ: ยี่สิบ
กรุณากรอกเป็นตัวเลขเท่านั้นตัวอย่างรวม: เครื่องคิดเลขรับค่าจากผู้ใช้
print("=== บวกเลขสองจำนวน ===")
x = float(input("จำนวนที่ 1: "))
y = float(input("จำนวนที่ 2: "))
total = x + y
# ถ้าผลลัพธ์ลงตัว แสดงเป็นจำนวนเต็ม
if total == int(total):
print(f"ผลบวก = {int(total)}")
else:
print(f"ผลบวก = {total}")ผลลัพธ์:
=== บวกเลขสองจำนวน ===
จำนวนที่ 1: 10
จำนวนที่ 2: 5
ผลบวก = 15สรุป
int(),float(),str(),bool()ใช้แปลงชนิดข้อมูล ชื่อฟังก์ชันตรงกับชื่อชนิดint()ตัดทศนิยมทิ้ง ไม่ปัดเศษ และแปลงข้อความ"3.5"ตรง ๆ ไม่ได้ ต้องผ่านfloat()ก่อน- ค่าที่เป็น “เท็จ” คือ
0,"",None, และคอลเลกชันว่าง - ถ้าไม่มั่นใจว่าค่าที่รับมาจะแปลงได้ ควรครอบด้วย
try/except ValueError
บทถัดไปเข้าสู่เรื่องใหญ่: คำสั่งเงื่อนไข if / elif / else ที่ทำให้โปรแกรมตัดสินใจเองได้