คำสั่งทำซ้ำ เป็นคำสั่งที่กำหนดให้กลุ่มของคำสั่งทำงานซ้ำได้หลายครั้ง หรือเรียกว่า ลูป (loop)
ในภาษาไพธอนมี 2 คำสั่งทำซ้ำอยู่ 2 ประเภท คือ
for นิยมใช้ในการทำซ้ำที่มีจำนวนรอบที่แน่นอน
while นิยมใช้ในการทำซ้ำไปเรื่อยๆ โดยมีการตรวจสอบเงื่อนไขก่อนทำ ถ้าเงื่อนไขเป็นจริงจะวนซ้ำไปเรื่อยๆ
for iterating_var in seq :
statements(s) # body of for loop
โดย
iterating_var คือ ตัวแปรที่ใช้อ้างถึงค่าแต่ละตัวใน seq ในแต่ละรอบ
seq คือ โครงสร้างข้อมูลที่ต้องการวนซ้ำ
statements คือ ชุดคำสั่งที่ต้องการทำซ้ำ
Data structure คือ โครงสร้างข้อมูลในภาษาไพธอน เช่น string, list, dictionary, tuple, set
โดยในวิชานี้เราจะเน้นการทำซ้ำกับ string, list และ dictionary
ชนิดข้อมูลในภาษาไพธอน แบ่งเป็นชนิดข้อมูลพื้นฐาน (Primitive data types) และชนิดข้อมูลที่ไม่ใช่พื้นฐาน (Non-primitive data types) ดังแสดงในรูปด้านข้างนี้
ตัวอย่างโปรแกรมวนซ้ำกับ string
my_string = "Python"
for char in my_string :
print(char)
คำสั่งทำซ้ำ for จะวนทำซ้ำเพื่อพิมพ์ตัวอักษรทุกตัวที่อยู่ในตัวแปร my_string
โดย char เป็นตัวแปรที่ใช้เก็บค่าตัวอักษรในแต่ละรอบ
ดังนั้นในลูปนี้จะทำงาน 5 รอบ เพราะ string มีความยาว 5 ตัวอักษร
output
P
y
t
h
o
n
ตัวอย่างโปรแกรมวนซ้ำกับ list
my_list = [1, 2, 3, 4]
for num in my_list :
print(num * 2)
ชนิดข้อมูล list เขียนอยู่ภายในเครื่องหมาย [ ] และคั่นสมาชิกแต่ละตัวด้วยเครื่องหมาย ","
คำสั่งทำซ้ำ for จะวนทำซ้ำเพื่อพิมพ์สมาชิกใน list ทุกตัวที่อยู่ในตัวแปร my_list คูณด้วย 2
โดย num เป็นตัวแปรที่ใช้เก็บค่าสมาชิกแต่ละตัวในแต่ละรอบ
ดังนั้นในลูปนี้จะทำงาน 4 รอบ เพราะสมาชิกใน list มีจำนวน 4 ตัว
output
2
4
6
8
ตัวอย่างโปรแกรมวนซ้ำกับ list ของ string
cars = ['Toyota', 'Honda', 'Nissan', 'Ford']
for car in cars:
print('Car brand:', car)
output
Car brand: Toyota
Car brand: Honda
Car brand: Nissan
Car brand: Ford
เราสามารถสร้าง list ของตัวเลขได้อัตโนมัติ โดยใช้ฟังก์ชัน range
for iterating_var in range(start, stop, step) :
statements(s)
เมื่อเรียกใช้ฟังก์ชัน range จะต้องระบุค่าที่ฟังก์ชันจำเป็นต้องใช้ เรียกว่า parameter ไว้ในวงเล็บเสมอ
โดยฟังก์ชัน range มี parameter ตั้งแต่ 1-3 ตัว โดยต้องมี stop อย่างน้อย 1 ตัวเสมอ ส่วนอีก 2 ตัวจะมีหรือไม่ก็ได้ และ parameter ทุกตัวต้องเป็นเลขจำนวนเต็มเท่านั้น
ความหมายของ parameter แต่ละตัว คือ
start เป็นค่าเริ่มต้นของสมาชิกตัวแรกใน list ถ้าไม่ระบุจะมีค่าเริ่มต้นเป็น 0
stop เป็นค่าสิ้นสุด โดยสมาชิกตัวสุดท้ายของ list จะเป็นค่าที่อยู่ก่อนค่าสิ้นสุดเสมอ (ไม่รวมค่าสิ้นสุดเป็นสมาชิกใน list)
step เป็นจำนวนค่าที่ต้องการเพิ่มขึ้นหรือลดลง สำหรับสมาชิกตัวถัดไป ถ้าไม่ระบุจะมีค่าเพิ่มขึ้นครั้งละ 1
กรณีที่ start >= stop จะไม่สามารถสร้าง list ได้ จะได้คำตอบเป็น [ ] คือ list ว่าง (empty list)
ตัวอย่างโปรแกรมวนซ้ำโดยใช้ range ระบุค่า stop
for i in range(5):
print(i)
ฟังก์ชัน range(5) เป็นการระบุเฉพาะค่า stop จะได้ list ประกอบด้วย [0, 1, 2, 3, 4]
สังเกตว่าจะเริ่มต้นที่ค่า start คือ 0 และไม่รวมค่า stop คือ 5 เป็นสมาชิกใน list
output
0
1
2
3
4
ตัวอย่างโปรแกรมวนซ้ำโดยใช้ range ระบุค่า start และ stop
for i in range(1,7):
print(i)
ฟังก์ชัน range(1,7) เป็นการระบุเฉพาะค่า start และ stop
จะได้ list ประกอบด้วย [1, 2, 3, 4, 5, 6]
สังเกตว่าจะเริ่มต้นที่ค่า start คือ 1 และไม่รวมค่า stop คือ 7 เป็นสมาชิกใน list
output
1
2
3
4
5
6
ตัวอย่างโปรแกรมวนซ้ำโดยใช้ range ระบุค่า start, stop และ step
for i in range(2,10,2):
print(i)
ฟังก์ชัน range(2,10, 2) เป็นการระบุเฉพาะค่า start และ stop
จะได้ list ประกอบด้วย [2, 4, 6, 8] สังเกตว่าจะเริ่มต้นที่ค่า start คือ 2 จากนั้นเพิ่มค่าขึ้นทีละ 2 และไม่รวมค่า stop คือ 10 เป็นสมาชิกใน list
output
2
4
6
8
ตัวอย่างผลของฟังก์ชัน range
range(0, 7, 1)
range(-3, 5, 2)
range(7, 3, -2)
range(7, 3, 2)
range(0.5, 2, 0.25)
list ที่ได้
[0, 1, 2, 3, 4, 5, 6]
[-3, -1, 1, 3]
[7, 5]
[] (list ว่าง)
syntax error
สังเกตผลลัพธ์ของ 2 ฟังก์ชันสุดท้าย
เนื่องจาก 7 >= 3 และ step เป็นค่าบวกจึงระบุค่าสมาชิกตัวถัดไปใน list ไม่ได้
ค่า parameter ต้องเป็น integer เท่านั้น
ลองหาแสดงสมาชิกใน list ของฟังก์ชัน range ต่อไปนี้
range(10)
range(2)
range(1)
range(0)
range(-10)
range(5, 10)
range(5, 7)
range(5, 5)
range(0, 5)
range(0, -1)
range(0, 10, 6)
range(10, 90, 20)
range(10, 5, -1)
range(6, 5, -2)
range(4, 5, -2)
เราสามารถตรวจสอบคำตอบได้โดยพิมพ์คำสั่งใน python shell โดยใช้ฟังก์ชัน list ครอบไว้เพื่อแสดงผล เช่น
>>> list(range(5))
[0, 1, 2, 3, 4]
ตัวอย่างโจทย์ระดับง่าย
เขียนโปรแกรมโดยใช้ลูป for และฟังก์ชัน range อย่างน้อย 3 รูปแบบที่แตกต่างกัน
พิมพ์เลข 1 ถึง 10
พิมพ์เลขคู่ที่อยู่ระหว่าง 2 ถึง 10
พิมพ์เลขยกกำลังสองของค่าระหว่าง -5 ถึง 5
พิมพ์เลขนับถอยหลังจาก 10 ถึง 1
ตัวอย่างโจทย์ระดับกลาง
1. รับจำนวนเต็ม n จากผู้ใช้ แล้วคำนวณหาผลรวมตั้งแต่เลข 1 ถึง n โดยใช้ loop for
n = 10
sum = 55
n = 100
sum = 5050
n = 5
sum = 15
คำตอบ
n = int(input('n = '))
sum = 0
for i in range(1, n+1):
sum = sum + i
print(sum)
2. รับจำนวนเต็ม n จากผู้ใช้ 5 จำนวน แล้วคำนวณหาผลรวมและค่าเฉลี่ยของเลข
20
1
34
8
15
sum = 78
average = 15.60
คำตอบ
sum_n = 0
for i in range(5):
n = int(input())
sum_n = sum_n + n
print('sum =', sum_n)
print('average = %.2f' % (sum_n/5))
3. รับเลขจำนวนเต็ม n จากผู้ใช้ รับเลขมาอีก n ตัว แล้วนับว่าในจำนวนนี้มีเลขจำนวนเต็มลบกี่ตัว
n = 5
1
-3
0
-1
4
count = 2
คำตอบ
n = int(input('n = '))
count = 0
for i in range(n):
x = int(input())
if x < 0:
count += 1
print('count =', count)
4. รับ string จากผู้ใช้ แล้วนับว่ามีสระ (aeiou) และพยัญชนะทั้งหมดกี่ตัว
hello
2
3
programming
3
8
คำตอบ
nvows, ncons = 0, 0
str = input()
for ch in str:
if ch in "aeiou":
nvows += 1
else:
ncons += 1
print(nvows)
print(ncons)
5. รับเลขจำนวนเต็ม n จากผู้ใช้ แล้วพิมพ์ * ตามตัวอย่างในรูป
n = 5 n = 3 n = 1
* * *
** **
*** ***
****
*****
คำตอบ
n = int(input("n = "))
for i in range(1, n+1):
print("* "*i)