2. การเขียนโปรแกรมแบบพื้นฐาน¶
Writing Simple Programs
2.1. จุดประสงค์¶
อธิบายขั้นตอนในการพัฒนาโปรแกรมได้
อธิบายหลักการเขียนโปรแกรมแบบ IPO (input-process-output) ได้
อธิบายกฏการตั้งชื่อ identifiers ได้
อธิบายกฏการเขียน expression ได้
อธิบายคำสั่งประเภท statement ได้
เขียนคำสั่งแสดงข้อความบน output ได้
เขียนคำสั่งกำหนดค่าให้ตัวแปรได้
2.2. Software Development Process¶
(ขั้นตอนการพัฒนาซอฟต์แวร์)
Analyze Problem > วิเคราะห์ปัญหาที่ต้องใช้ซอฟต์แวร์มาแก้ปัญหา
Determine Specifications > เขียนคำอธิบายปัญหาโดยระบุ input, output และความสัมพันธ์กับปัญหาอื่นๆในระบบ เรียกว่า specification
Create Design > ระบุโครงสร้างและวิธีการแก้ปัญหาที่เขียนไว้ในข้อ 2 หรือขั้นตอนในการออกแบบ algorithm
Implement Design > เริ่มเขียนคำสั่งตาม algorithm
Test/Debug Program > ทดสอบโปรแกรมแต่ละ specification โดยใช้ input แล้วตรวจสอบผลลัพธ์กับ output เพื่อหาข้อผิดพลาด (bug)
Maintain Program > การพัฒนาต่อยอดตามความต้องการของลูกค้าที่เพิ่มขึ้น
2.3. ตัวอย่าง 0201 การพัฒนาซอฟต์แวร์เพื่อแปลงอุณหภูมิ¶
ซอฟต์แวร์สำหรับแปลงอุณหภูมิจาก Celsius เป็น Fahrenheit - Temperature Converter
Analysis
ผู้ใช้ต้องการกรอกอุณหภูมิเป็น Celsius แล้วต้องการให้โปรแกรมแปลงค่าอุณหภูมิเป็น Fahrenheit
Specification
Input - ค่าอุณหภูมิเป็น Celsius
Output - ค่าอุณหภูมิเป็น Fahrenheit
Process - ความสัมพันธ์ระหว่างค่า output กับ input คือ output = (9/5) x input + 32
Create Design (Algorithm)
ใช้ลำดับการทำงาน Input -> Process -> Output
* __input__ ผู้ใช้กรอกตัวเลขระบุอุณหภูมิเป็น Celsius (C)
* __process__ แปลงเป็น Fahrenheit(F) โดยใช้สมการ
* __output__ แสดงค่าอุณหภูมิ F ออกมาที่หน้าจอ
Implement Design
C = float(input('กรอกอุณหภูมิ(Celsius) '))
F = 9 * C / 5 + 32
print('อุณหภูมิ(Fahrenheit) '+str(F))
Test/Debug Program
รันโปรแกรมแล้วกรอกค่าทดสอบต่อไปนี้ ว่าสามารถทำงานได้จริงหรือมีข้อผิดพลาดหรือไม่?
Input |
Output |
---|---|
กรอกอุณหภูมิ(Celsius) 0 | |
ณหภูมิ(Fahrenheit) 32.0 | |
กรอกอุณหภูมิ(Celsius) 100 | |
ณหภูมิ(Fahrenheit) 212.0 | |
กรอกอุณหภูมิ(Celsius) -40 | |
ณหภูมิ(Fahrenheit) -40.0 | |
2.4. องค์ประกอบต่างๆ ในโปรแกรม¶
2.4.1. Names¶
C
และ F
คือ ชื่ออ้างอิง(identifiers) หรือ ตัวแปร(variables)
กฏการตั้งชื่อ 1. เป็นลำดับของตัวอักษรติดกันแต่ละอันสามารถใช้ a-z, A-Z, 0-9, _ โดยไม่จำกัดความยาว 2. ตัวแรกต้องไม่เป็นตัวเลข 3. ต้องไม่เป็น keywords (คำสงวน - identifier ที่ python เก็บไว้ใช้เอง) 4. ต้องไม่เป็นค่า literals - ชุดของอักขระที่ Python สามารถแปลงเป็นค่าได้ทันที เช่น 'Paul' 342.0 เป็นต้น
ตัวอย่าง identifiers ที่ถูกต้อง
X
Celsius
age
name
number_of_students
numberOfStudents
x1
v9
_name
__repr__
ตัวอย่าง identifiers ที่ผิด
10name
number of students
number-of-students
numberOf-Students
Exercises * ตั้งชื่อ identifiers ที่ถูกต้อง 10 ชื่อ
2.4.2. Expressions¶
เป็นส่วนของคำสั่งที่สามารถประมวลออกมาเป็นค่าได้ เช่น
สมการ
3*9 + 3
5**7
literals
'ชื่อ สกุล'
"Paul Phoenix"
610000
3.44
0x1A
'A'
"B+"
identifier ที่เก็บค่า
x
y
age
ฟังก์ชันที่ประมวลค่าออกมาให้ใช้งาน
min([1,3,9])
max([1,3,9,5,2])
input()
int('20')
float('3.95')
สมการของ expression หลายๆอัน
min([1,3,9]) - max([1,3,9,5,2])
int(input())
float(input())
x**9 + y
NOTE: ถ้าเรียกใช้ identifier หรือตัวแปรที่ยังไม่กำหนดค่า ผลคือ NameError ลองดู
UndefinedIdentifier * 20
2.4.3. Output statements¶
คำสั่งแสดงผลลัพธ์
รูปแบบ
print()
print(<expression>, <expression>, ..., <expression>)
ตัวอย่าง
print()
print('Your GPA is ', 3.44)
print('Hello, ', name, '. You are ', 2561 - 2540, ' years old.')
print(4, 5, 6, 7, 8, sep=' ', end='\n')
print(4, 5, 6, 7, 8, sep=' ')
print(4, 5, 6, 7, 8, sep=',', end='\n')
print(4, 5, 6, 7, 8, sep=',')
print(4, 5, 6, 7, 8, sep='', end='\n')
print(4, 5, 6, 7, 8, sep='', end='')
print('Result is ', 4, 5, 6, 7, 8, sep='', end='\n')
2.4.4. Assignment Statements¶
คำสั่งกำหนดค่าให้กับ identfier ตัวอย่าง
รูปแบบ
<identifier> = <expression>
ตัวอย่าง
F = 9 * C / 5 + 32
x = 20
y = x ** 9
x = x + 1
x = x**2 - 2*x*y
name = 'Paul Phoenix'
name = input()
age = 2561 - int(input('กรอกปีพ.ศ.เกิด '))
2.4.5. Simultaneous Assignment¶
คำสั่งกำหนดค่าของ identifiers หลายตัวพร้อมกัน
รูปแบบ
<identifier>, <identifier>, ... = <expression>, <expression>, ...
หมายเหตุ จำนวน identifiers ต้องเท่ากับ จำนวน expression
ตัวอย่าง
x, y, z = 1, 2, 3
a, b, c, d = 2**2, 2**3, 2**4, 2*8 + 2
name, gpa = 'อุดม สมบูรณ์แต้', 3.25
x, y = y, x
หมายเหตุ ทำไมคำสั่งสุดท้ายมีผลลัพธ์ไม่เหมือนกับ 2 คำสั่งต่อไปนี้
x = y
y = x
กำหนดค่าหลายตัวพร้อมกันจาก ``input()`` โดยการกรอกข้อมูลที่คั่นด้วย comma (,)
x, y, z = eval(input()) # กรอก 1,2,3
name, gpa = eval(input()) # กรอก "อุดม สมบูรณ์แต้", 3.44
2.5. การเขียนคำสั่งเพื่อรับหลายข้อมูลในบรรทัดเดียว¶
2.5.1. กรณีที่ทราบจำนวนที่ชัดเจนและมีจำนวนไม่มาก¶
ตัวอย่าง 0202 การเขียนคำสั่งเพื่อหาผลรวมของจำนวนเต็ม 3 จำนวนที่ผู้ใช้กรอกในบรรทัดเดียวแต่ละตัวคั่นด้วย
,
Input |
Output |
---|---|
1,2,3 |
6 |
11,-20,33 |
24 |
12,23,99 |
134 |
a, b, c = eval(input())
print(a + b + c)
Exercises * EX02_01 จงเขียนคำสั่งเพื่อหาค่าเฉลี่ยของตัวเลข 5
จำนวนที่ผู้ใช้กรอกในหนึ่งบรรทัด โดยแต่ละตัวเลขคั่นด้วย ,
Input |
Output |
---|---|
1,2,3,4,5 |
3.0 |
70,80,75,65,88 |
75.6 |
3.22,3.44,2.99,3.74,3.33 |
3.344 |
2.5.2. กรณีที่ไม่ทราบจำนวนที่ชัดเจน¶
ควรนำเข้าเป็นชุดลำดับข้อมูล (sequence) โดยใช้ list
ดังนี้
python seq = list(eval(input())) print(seq)
2.5.3. ลำดับ (sequence)¶
ลำดับ (sequence) หมายถึง ชุดของข้อมูลที่มีสมาชิกเรียงกันเป็นลำดับมีตำแหน่งของสมาชิกแต่ละตัวชัดเจน เช่น 3.44, 2.22, 3.00, 3.50, 3.66 เป็นลำดับที่มีสมาชิกดังนี้
สมาชิกตัวแรก(หมายเลข 0) คือ 3.44
สมาชิกหมายเลข 1 คือ 2.22
สมาชิกหมายเลข 2 คือ 3.00
สมาชิกหมายเลข 3 คือ 3.50
สมาชิกหมายเลข 4 คือ 3.66
ตัวอย่างการเขียนชุดข้อมูลที่เป็นลำดับในภาษา Python
[3.44, 2.22, 3.00, 3.50, 3.66]
[1, 2, 3, 4, 5]
['avocado', 'banana', 'cranberry', 'durian']
2.5.4. การตรวจสอบประเภทข้อมูลที่รับเข้า¶
seq = list(eval(input()))
type(seq) # ประเภทข้อมูลที่อ้างอิงโดย seq
print(type(seq))
print(len(seq)) # จำนวนสมาชิกในชุดข้อมูลที่อ้างอิงโดย seq
print(seq[0])
print(type(seq[0])) # ประเภทข้อมูลของสมาชิกตัวแรกของ seq
print(type(seq[1]))
print(type(seq[2]))
print(type(seq[3]))
2.5.5. ตัวอย่าง -¶
จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย
,
แล้วหาผลรวม
Input |
Output |
---|---|
2,5,7,6 |
20 |
9,-2,10,6,5,10 |
38 |
seq = list(eval(input()))
print(sum(seq))
จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย
,
แล้วหาค่าที่น้อยที่สุดในชุดข้อมูล
Input |
Output |
---|---|
2,5,7,6 |
2 |
9,-2,10,6,5,10 |
-2 |
seq = list(eval(input()))
print(min(seq))
2.6. Exercises - จงเขียนซอฟต์แวร์เพื่อทำงานต่อไปนี้¶
EX02_02 จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย
,
แล้วหาค่าที่มากที่สุดในชุดข้อมูลEX02_03 จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย
,
แล้วหาค่าเฉลี่ย