Python แปลงชนิดข้อมูล (Type Casting)



Python เป็นภาษาที่เข้มงวดเรื่องชนิดข้อมูลพอสมควร เอาข้อความไปบวกกับตัวเลขตรง ๆ ไม่ได้ เอาทศนิยมไปใช้ตรงที่ต้องการจำนวนเต็มก็ไม่ได้ การแปลงชนิดข้อมูลจึงเป็นเรื่องที่ต้องทำอยู่เรื่อย ๆ โดยเฉพาะตอนรับค่าจากผู้ใช้หรืออ่านจากไฟล์

ชนิดข้อมูลพื้นฐานที่ต้องรู้จัก

ชนิดตัวอย่างความหมาย
int10, -3, 0จำนวนเต็ม
float3.14, -0.5, 2.0จำนวนทศนิยม
str"สวัสดี", "123"ข้อความ
boolTrue, 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")))   # 3

float() แปลงเป็นทศนิยม

print(float("3.14"))   # 3.14
print(float("10"))     # 10.0
print(float(5))        # 5.0

str() แปลงเป็นข้อความ

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 ที่ทำให้โปรแกรมตัดสินใจเองได้