Python by exercises:input and basic calculation
From Blognone
เราจะเริ่มด้วยการเขียนโปรแกรมอ่านข้อมูลรายวิชาในแฟ้ม 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] (หน่วยกิต)