Python by exercises:input and basic calculation

From Blognone

Jump to: navigation, search

เราจะเริ่มด้วยการเขียนโปรแกรมอ่านข้อมูลรายวิชาในแฟ้ม courses.txt ในส่วนนี้จะยังไม่มีแบบฝึกหัด แต่ควรทดลองโปรแกรมตัวอย่างแรกด้วย

ตัวอย่างข้อมูลในแฟ้ม courses.txt เป็นดังนี้

417167,4
420111,3
420113,1

โดยสตริงแรกคือรหัสวิชา และตัวที่สองหลังเครื่องหมายลูกน้ำคือจำนวนหน่วยกิต

พิจารณาโปรแกรมแรกของเราด้านล่าง (และทดลองด้วย!)

f = open('courses.txt','r')
lines = f.readlines()
course_count = 0
total_credit = 0
for line in lines:
    items = line.strip().split(',')
    print items[0], items[1]
    course_count += 1
    total_credit += int(items[1])
print "Total of", course_count, "courses with", total_credit, "credits"

โปรแกรมดังกล่าว เปิดแฟ้ม courses.txt จากนั้นอ่านข้อมูลเข้ามาเพื่อพิมพ์รายการรายวิชา และนับจำนวนรายวิชาและหาผลรวมของหน่วยกิต ให้จัดเก็บโปรแกรมดังกล่าวในโฟล์เดอร์เดียวกับแฟ้มข้อมูล โดยให้ชื่อ read-courses.py จากนั้นเรียกให้โปรแกรมทำงานโดยสั่ง

python read-courses.py

เราจะค่อย ๆ พิจารณาโปรแกรมดังกล่าวพร้อมกับเรียนรู้ไวยากรณ์ของภาษา Python

Contents

ไม่มีเครื่องหมายปิดคำสั่ง

คำสั่ง (statement) ไม่จำเป็นต้องปิดด้วยเครื่องหมาย ';' อย่างไรก็ตามถ้าเราเขียนหลายคำสั่งในบรรทัดเดียวกัน เราจะใช้เครื่องหมาย `;' คั่นระหว่างคำสั่ง แต่นั่นไม่ใช่สิ่งที่นิยมทำกัน (ถ้าไม่มีเหตุผลที่หนักแน่นพอ)

ไม่ต้องประกาศตัวแปร ไม่ต้องระบุแบบชนิดข้อมูล (type)

สังเกตว่าเราสามารถใช้ตัวแปรต่าง ๆ ได้เลย โดยไม่จำเป็นต้องประกาศ หรือระบุ type ของตัวแปรนั้น     type สำหรับตัวแปรแต่ละตัวจะถูกระบุไปกับตัวแปรเมื่อโปรแกรมทำงาน ลักษณะดังกล่าวเป็นคุณสมบัติหนึ่งของภาษาโปรแกรมเชิงพลวัติ (dynamic language)

อย่างไรก็ตาม ไม่ใช่ว่าตัวแปรแต่ละตัวจะไม่มี type สังเกตว่าเราต้องแปลงข้อมูล เวลาจะนำค่าจากตัวแปร items[1] ไปใช้เป็นจำนวนเต็มด้วยฟังก์ชัน int

โครงสร้างแบบบล็อค

ภาษา Python เป็นภาษาระดับสูงที่มีโครงสร้างแบบบล็อกเช่นเดียวกับภาษาอื่น ๆ อย่างไรก็ตาม วิธีการระบุบล็อกใน Python ไม่ได้ทำโดยใช้เครื่องหมาย เช่น เครื่องหมายปีกกา ({ หรือ }) อย่างเช่นภาษา C หรือ Java แต่ภาษา Python ใช้การเว้นย่อหน้าแทน ส่วนของโปรแกรมที่มีการเว้นระยะย่อหน้าเท่ากันจะถือว่าอยู่ในบล็อกเดียวกัน และการเว้นย่อหน้าเข้าไปเป็นการแสดงบล็อก

สังเกตด้วยว่าบรรทัดก่อนหน้าจะสิ้นสุดด้วยเครื่องหมาย `:' แทนการบอกว่าต่อไปจะเป็นบล็อก

โปรแกรมด้านล่างแสดงอีกตัวอย่างของการใช้ย่อหน้าในการระบุบล็อก ในโปรแกรมดังกล่าว ถ้า x น้อยกว่าหรือเท่ากับ 10 โปรแกรมจะพิมพ์คำว่า Welcome ออกมา

if x>10:
    print "Hello"
    if x<20:
        print "Good bye"
else:
    print "Welcome"

โปรแกรมดังกล่าวจะทำงานต่างออกไปถ้าเราเปลี่ยนการย่อหน้า เช่น ถ้าเราเขียน

if x>10:
    print "Hello"
    if x<20:
        print "Good bye"
    else:
        print "Welcome"

เมื่อ x<=10 โปรแกรมจะไม่พิมพ์อะไรออกมา

อ่านข้อมูลและลิสต์

สองบรรทัดด้านล่างเปิดแฟ้มและอ่านข้อมูลจากทั้งแฟ้มมาเก็บในตัวแปร lines

f = open('courses.txt','r')      #เปิดแฟ้ม
lines = f.readlines()              #อ่านทั้งแฟ้มมาเก็บในตัวแปร lines

เมท็อด readlines คืนค่าเป็นลิสต์ของสตริง ลิสต์เป็นโครงสร้างข้อมูลพื้นฐานใน Python สำหรับจัดการกับลำดับของข้อมูล (เราจะทดลองต่อไป)

พิจารณาข้อมูลทุกตัวในลิสต์

คำสั่งควบคุม for ใช้เพื่อจะ ``วิ่ง เข้าไปในรายการ ตัวอย่างการใช้คำสั่ง for แสดงด้านล่าง

primes = [2,3,5,7,9]              # would print:
print 'First 5 primes are:'       #    First 5 primes are:
for p in primes:                  #    2
    print p                       #    3 ...

ในโปรแกรมด้านต้นตัวแปร line จะถูกใช้เพื่อพิจารณาข้อมูลทุกตัวในลิสต์ ตัวอย่างข้อมูลแต่ละบรรทัดเช่น "204111,3\n"

จากนั้นเราสั่ง line.strip() เพื่อตัดตัวอักษรเช่น "\n" (ขึ้นบรรทัดใหม่) ทิ้ง แล้วสั่ง split(',') เพื่อแยกสตริงออกมาเป็นส่วน ๆ ด้วยโดยใช้ตัวอักษร ',' เป็นตัวแบ่ง ค่าที่คืนมาจะเป็นลิสต์ ซึ่งเราจะใช้ต่อเป็น items[0] (เก็บรหัสวิชา) และ items[1] (หน่วยกิต)