Python ลูป for และ range()
เวลาต้องทำอะไรซ้ำ ๆ เช่น พิมพ์ข้อความ 10 บรรทัด หรือคำนวณทีละรายการในลิสต์ เราไม่เขียนโค้ดซ้ำ 10 รอบ แต่ใช้ลูป for ให้ Python วนทำให้
for วนบนลำดับข้อมูล
รูปแบบคือ “สำหรับสมาชิกแต่ละตัว ใน ลำดับข้อมูล ให้ทำ…”
fruits = ["แอปเปิล", "กล้วย", "ส้ม"]
for fruit in fruits:
print(f"ฉันชอบ{fruit}")ผลลัพธ์:
ฉันชอบแอปเปิล
ฉันชอบกล้วย
ฉันชอบส้มfruit เป็นตัวแปรที่เราตั้งชื่อเอง ในแต่ละรอบมันจะเปลี่ยนไปถือสมาชิกตัวถัดไปของลิสต์ ตั้งชื่อให้สื่อความหมายจะอ่านง่ายกว่า
วน string ก็ได้ จะได้ทีละตัวอักษร
for ch in "ABC":
print(ch)ผลลัพธ์:
A
B
Crange() สร้างลำดับตัวเลข
ถ้าอยากวนตามจำนวนรอบ ไม่ได้วนบนข้อมูลที่มีอยู่ ใช้ range()
range(หยุด)
เริ่มที่ 0 ไปจนถึงก่อนเลขที่ระบุ
for i in range(5):
print(i)ผลลัพธ์:
0
1
2
3
4สังเกตว่าได้ 0 ถึง 4 ไม่ถึง 5 นี่คือพฤติกรรมมาตรฐานของ Python คือ “ไม่รวมตัวสุดท้าย”
range(เริ่ม, หยุด)
for i in range(1, 6):
print(i) # 1 2 3 4 5range(เริ่ม, หยุด, ก้าว)
ตัวเลขที่สามคือระยะก้าว จะข้ามทีละเท่าไหร่
for i in range(0, 21, 5):
print(i) # 0 5 10 15 20
for i in range(10, 0, -1):
print(i) # นับถอยหลัง 10 ลงมาถึง 1ใช้ตัวแปรลูปคำนวณ
ตัวอย่างคลาสสิก: หาผลรวม 1 ถึง 100
total = 0
for i in range(1, 101):
total = total + i
print(total) # 5050total = total + i อ่านว่า “เอาค่า total เดิม บวกกับ i แล้วเก็บกลับเข้า total” เขียนย่อได้เป็น total += i
enumerate(): อยากได้ทั้งลำดับและค่า
บ่อยครั้งเราอยากรู้ว่ากำลังวนอยู่ตัวที่เท่าไหร่ด้วย enumerate() ให้ทั้งเลขลำดับและค่ามาพร้อมกัน
students = ["สมชาย", "สมหญิง", "สมศรี"]
for index, name in enumerate(students, start=1):
print(f"{index}. {name}")ผลลัพธ์:
1. สมชาย
2. สมหญิง
3. สมศรีstart=1 บอกให้เริ่มนับที่ 1 ถ้าไม่ใส่จะเริ่มที่ 0
ลูปซ้อนลูป
ใส่ for ไว้ใน for ได้ ลูปข้างในจะวนครบทุกรอบ ต่อหนึ่งรอบของลูปข้างนอก
for row in range(1, 4):
for col in range(1, 4):
print(f"{row}x{col}={row*col}", end=" ")
print()ผลลัพธ์:
1x1=1 1x2=2 1x3=3
2x1=2 2x2=4 2x3=6
3x1=3 3x2=6 3x3=9 end=" " ทำให้ print ไม่ขึ้นบรรทัดใหม่ แต่ต่อด้วยช่องว่างสองช่องแทน ส่วน print() เปล่า ๆ ท้ายลูปในคือการสั่งขึ้นบรรทัดใหม่หนึ่งครั้ง
for … else
Python มีลูกเล่นแปลก ๆ คือ for มี else ได้ บล็อก else จะทำงานเมื่อลูปวนจนจบโดยไม่โดน break (เดี๋ยวเจอ break ในบทถัดไป) ใช้ไม่บ่อยแต่รู้ไว้ก็ดี
for i in range(1, 5):
print(i)
else:
print("วนครบแล้ว")ตัวอย่างรวม: สูตรคูณตามที่ผู้ใช้เลือก
n = int(input("อยากดูสูตรคูณแม่ไหน: "))
print(f"--- สูตรคูณแม่ {n} ---")
for i in range(1, 13):
print(f"{n} x {i:>2} = {n * i}")ผลลัพธ์:
อยากดูสูตรคูณแม่ไหน: 7
--- สูตรคูณแม่ 7 ---
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 12 = 84สรุป
for x in ข้อมูล:วนหยิบสมาชิกทีละตัว ใช้ได้กับลิสต์ string และลำดับข้อมูลอื่น ๆrange(หยุด),range(เริ่ม, หยุด),range(เริ่ม, หยุด, ก้าว)สร้างลำดับตัวเลข และไม่รวมตัวสุดท้ายenumerate()ให้เลขลำดับมาพร้อมค่า+=เป็นตัวย่อของx = x + ...ใช้บ่อยมากกับการสะสมค่าในลูป
บทถัดไปว่าด้วยลูป while พร้อมคำสั่ง break และ continue ที่ใช้ควบคุมการวน