2. การเขียนโปรแกรมแบบพื้นฐาน

Writing Simple Programs

Colab

2.1. จุดประสงค์

  1. อธิบายขั้นตอนในการพัฒนาโปรแกรมได้

  2. อธิบายหลักการเขียนโปรแกรมแบบ IPO (input-process-output) ได้

  3. อธิบายกฏการตั้งชื่อ identifiers ได้

  4. อธิบายกฏการเขียน expression ได้

  5. อธิบายคำสั่งประเภท statement ได้

  6. เขียนคำสั่งแสดงข้อความบน output ได้

  7. เขียนคำสั่งกำหนดค่าให้ตัวแปรได้

2.2. Software Development Process

(ขั้นตอนการพัฒนาซอฟต์แวร์)

  1. Analyze Problem > วิเคราะห์ปัญหาที่ต้องใช้ซอฟต์แวร์มาแก้ปัญหา

  2. Determine Specifications > เขียนคำอธิบายปัญหาโดยระบุ input, output และความสัมพันธ์กับปัญหาอื่นๆในระบบ เรียกว่า specification

  3. Create Design > ระบุโครงสร้างและวิธีการแก้ปัญหาที่เขียนไว้ในข้อ 2 หรือขั้นตอนในการออกแบบ algorithm

  4. Implement Design > เริ่มเขียนคำสั่งตาม algorithm

  5. Test/Debug Program > ทดสอบโปรแกรมแต่ละ specification โดยใช้ input แล้วตรวจสอบผลลัพธ์กับ output เพื่อหาข้อผิดพลาด (bug)

  6. Maintain Program > การพัฒนาต่อยอดตามความต้องการของลูกค้าที่เพิ่มขึ้น

2.3. ตัวอย่าง 0201 การพัฒนาซอฟต์แวร์เพื่อแปลงอุณหภูมิ

ซอฟต์แวร์สำหรับแปลงอุณหภูมิจาก Celsius เป็น Fahrenheit - Temperature Converter

  1. Analysis

    ผู้ใช้ต้องการกรอกอุณหภูมิเป็น Celsius แล้วต้องการให้โปรแกรมแปลงค่าอุณหภูมิเป็น Fahrenheit

  2. Specification

Input - ค่าอุณหภูมิเป็น Celsius
Output - ค่าอุณหภูมิเป็น Fahrenheit
Process - ความสัมพันธ์ระหว่างค่า output กับ input คือ  output = (9/5) x input + 32
  1. Create Design (Algorithm)

    ใช้ลำดับการทำงาน Input -> Process -> Output

* __input__ ผู้ใช้กรอกตัวเลขระบุอุณหภูมิเป็น Celsius (C)

* __process__ แปลงเป็น Fahrenheit(F) โดยใช้สมการ
\[F = \frac{9C}{5} + 32\]
* __output__ แสดงค่าอุณหภูมิ F ออกมาที่หน้าจอ
  1. Implement Design

C = float(input('กรอกอุณหภูมิ(Celsius) '))
F = 9 * C / 5 + 32
print('อุณหภูมิ(Fahrenheit) '+str(F))
  1. 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

เป็นส่วนของคำสั่งที่สามารถประมวลออกมาเป็นค่าได้ เช่น

  1. สมการ

3*9 + 3
5**7
  1. literals

'ชื่อ สกุล'
"Paul Phoenix"
610000
3.44
0x1A
'A'
"B+"
  1. identifier ที่เก็บค่า

x
y
age
  1. ฟังก์ชันที่ประมวลค่าออกมาให้ใช้งาน

min([1,3,9])
max([1,3,9,5,2])
input()
int('20')
float('3.95')
  1. สมการของ 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. ตัวอย่าง -

  1. จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย , แล้วหาผลรวม

Input

Output

2,5,7,6

20

9,-2,10,6,5,10

38

seq = list(eval(input()))
print(sum(seq))
  1. จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย , แล้วหาค่าที่น้อยที่สุดในชุดข้อมูล

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 จงเขียนโปรแกรมรับชุดข้อมูลตัวเลขในหนึ่งบรรทัดที่แต่ละตัวคั่นด้วย , แล้วหาค่าเฉลี่ย