บทเรียนขั้นกลาง

เรียนรู้การใช้งานภาษาปิยะธอนในระดับที่สูงขึ้น รวมถึงคลาส การจัดการข้อผิดพลาด และการทำงานกับไฟล์

ชั้นและวัตถุ

การสร้างชั้น (Class)

ชั้น นักเรียน:
    นิยาม __เริ่มต้น__(ตัว, ชื่อ, อายุ):
        ตัว.ชื่อ = ชื่อ
        ตัว.อายุ = อายุ

    นิยาม แนะนำตัว(ตัว):
        พิมพ์(f"สวัสดี ผมชื่อ {ตัว.ชื่อ} อายุ {ตัว.อายุ} ปี")

# สร้างวัตถุจากชั้น
สมชาย = นักเรียน("สมชาย", 15)
สมชาย.แนะนำตัว()

การสืบทอด (Inheritances)

ชั้น บุคคล:
    นิยาม __เริ่มต้น__(ตัว, ชื่อ):
        ตัว.ชื่อ = ชื่อ

ชั้น นักเรียน(บุคคล):
    นิยาม __เริ่มต้น__(ตัว, ชื่อ, ระดับชั้น):
        คลาสแม่.__เริ่มต้น__(ตัว, ชื่อ)
        ตัว.ระดับชั้น = ระดับชั้น

คุณสมบัติ (Properties)

ชั้น บัญชีธนาคาร:
    นิยาม __เริ่มต้น__(ตัว):
        ตัว._ยอดเงิน = 0

    @คุณสมบัติ
    นิยาม ยอดเงิน(ตัว):
        คืนค่า ตัว._ยอดเงิน

    @ยอดเงิน.setter
    นิยาม ยอดเงิน(ตัว, จำนวน):
        ถ้า จำนวน >= 0:
            ตัว._ยอดเงิน = จำนวน
        อื่น:
            ยก ValueError("ยอดเงินต้องไม่ติดลบ")

การจัดการข้อผิดพลาด

การใช้ ลอง-ยกเว้น

ลอง:
    ไฟล์ = เปิด("ข้อมูล.txt", "r", encoding="utf-8")
    ข้อมูล = ไฟล์.read()
ยกเว้น FileNotFoundError:
    พิมพ์("ไม่พบไฟล์")
ยกเว้น PermissionError:
    พิมพ์("ไม่มีสิทธิ์เข้าถึงไฟล์")
สุดท้าย:
    ไฟล์.close()

การสร้างข้อผิดพลาดเอง

ชั้น ข้อผิดพลาดอายุ(Exception):
    ผ่าน

นิยาม ตรวจสอบอายุ(อายุ):
    ถ้า อายุ < 0:
        ยก ข้อผิดพลาดอายุ("อายุต้องไม่ติดลบ")
    คืนค่า จริง

ตัวจัดการบริบท (Context Managers)

ชั้น จัดการไฟล์:
    นิยาม __เริ่มต้น__(ตัว, ชื่อไฟล์, โหมด):
        ตัว.ชื่อไฟล์ = ชื่อไฟล์
        ตัว.โหมด = โหมด

    นิยาม __เข้า__(ตัว):
        ตัว.ไฟล์ = เปิด(ตัว.ชื่อไฟล์, ตัว.โหมด)
        คืนค่า ตัว.ไฟล์

    นิยาม __ออก__(ตัว, ชนิด, ค่า, traceback):
        ตัว.ไฟล์.close()

# การใช้งาน
ด้วย จัดการไฟล์("ข้อมูล.txt", "r") เป็น ไฟล์:
    ข้อมูล = ไฟล์.read()

การทำงานกับไฟล์

การอ่านและเขียนไฟล์

# การเขียนไฟล์
ด้วย เปิด("บันทึก.txt", "w", encoding="utf-8") เป็น ไฟล์:
    ไฟล์.write("สวัสดีชาวโลก\n")
    ไฟล์.write("นี่คือบรรทัดที่สอง")

# การอ่านไฟล์
ด้วย เปิด("บันทึก.txt", "r", encoding="utf-8") เป็น ไฟล์:
    สำหรับ บรรทัด ใน ไฟล์:
        พิมพ์(บรรทัด.strip())

การทำงานกับ CSV

นำเข้า csv

# เขียนไฟล์ CSV
ด้วย เปิด("ข้อมูล.csv", "w", newline="", encoding="utf-8") เป็น ไฟล์:
    เขียน = csv.writer(ไฟล์)
    เขียน.writerow(["ชื่อ", "อายุ", "คะแนน"])
    เขียน.writerow(["สมชาย", 15, 85])

# อ่านไฟล์ CSV
ด้วย เปิด("ข้อมูล.csv", "r", encoding="utf-8") เป็น ไฟล์:
    อ่าน = csv.DictReader(ไฟล์)
    สำหรับ แถว ใน อ่าน:
        พิมพ์(f"ชื่อ: {แถว['ชื่อ']}, อายุ: {แถว['อายุ']}")

การทำงานกับโมดูล

การสร้างโมดูล

# ไฟล์: คำนวณ.pi
นิยาม บวก(a, b):
    คืนค่า a + b

นิยาม ลบ(a, b):
    คืนค่า a - b

_ค่าลับ = "นี่เป็นตัวแปรภายใน"

การใช้งานโมดูล

# นำเข้าทั้งโมดูล
นำเข้า คำนวณ

ผลบวก = คำนวณ.บวก(5, 3)

# นำเข้าบางฟังก์ชัน
จาก คำนวณ นำเข้า ลบ

ผลลบ = ลบ(10, 7)