การทำซ้ำ

ลูป For

ลูปประเภท for นั่นเอาไว้ใช้ทำ loop ที่มีปริมาณ loop อธิบายไว้
เช่นให้ loop 5 ครั้ง หรือ loop ตามขนาดความยาวของตัวอักษร (String)

นี่ก็คือวิธีใช้งาน for loop ครับ

for <variable> in <list or string>:

ถ้ายังใช้ไม่เป็น ก็มีตัวอย่างมาให้ดูครับ

for i in range(10):
    print(i, end=" ")

# Returns 0 1 2 3 4 5 6 7 8 9

จุดที่น้องๆควรสังเกตนั่นก็คือ <variable> และ range(10) ครับ

  • โดยตัวแปรที่พี่เลือก​ (นั่นก็คือ i) ก็สามารถถูกเรียกได้ตลอด ซึ่งตัว i นี้ก็จะเพื่มไปเรื่อยๆ ตาม range ครับ พี่เลยสามารถที่จะเขียน print(i) ได้ และออกมาเป็น 0 1 2 3 ... นั่นเอง
  • range(10) น้องๆก็อาจจะคุ้นๆกับ [] อ่ะเนอะ ที่บอกว่าให้เรื่มจุดไหน หยุดจุดไหน ก็จะคล้ายๆกับ range() นะครับ โดยหากว่าน้องๆใส่ parameter ไปเพียงอันเดียว มันก็จะเรื่มตั้งแต่ 0 ให้ จนถึงตัวเลขที่น้องใส่เข้าไป ในกรณีนี้ก็คือ 10 - 1 = 9 นั่นเอง

อย่าลืม

ว่า array เรื่มที่ 0 นะจ๊ะ

หากน้องๆยังไม่เข้าใจ keyword in และฟังก์ชั่น range() ก็จะอยู่หลังๆเลยจ้า

โจทย์ปัญหา อยากวนเท่ากับตัวเลขในตัวแปร

age = 21
for i in range(age):
    print("My age is : %d years old" %i)

โจทย์ปัญหา อยาก loop เท่าความยาวของ string

first_name = "Kumamon"
for i in range(len(first_name)):
    print(i)

โดยน้องสามารถคำนวณความยาวของ string โดยการใช้ len() ได้นะครับ และตัว len() ก็จะคืนค่าออกมาเป็นตัวเลข แล้วตัวฟังก์ชั่น range() ก็จะไปรับตัวเลขมา เพื่อมารันจำนวนนั้นๆให้ครับ

โจทย์ปัญหา อยากให้ปรี้นท์ตัวอักษรแต่ละตัวออกมาแทน

for i in "Kumamon":
    print(i, end=" ")

# Returns "K u m a m o n"

โจทย์ปัญหา อยากใช้งาน loop เพื่อปรี้นท์ข้อมูลใน array ออกมาทีละตัว

text = [1,2,3,4,5]
for i in text:
    print(i, end=" ")

# Returns "1 2 3 4 5"

Loop ซ้อน Loop

โดย loop ทั่วๆไปก็สามารถทำ loop ซ้อนๆกันได้ เพื่อความเฟี้ยวฟ้าว หรือเพื่อประหยัดเวลาของน้องๆเอง

หลักการก็คือ ตัวโปรแกรมก็จะรัน loop แรก แล้วมันก็ไปเจอ loop อีกอันนึง เลยเข้าไปทำ loop ที่อยู่ข้างในกว่า

This program will run to the total of 2 x 2 x 2 = 8 times.

for i in range(2, 5):
    for j in range(2, 5):
        print("%d x %d = %d" %(i, j, i * j))

ก็จะออกผลลัพท์มาเป็น

2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16

Using For loops to call function

def main():
    for i in range(2):
        for j in range(2):
            kumamon(i, j)

def kumamon(num1, num2):
    print(num1 + num2)

main()

# Returns
0
1
1
2

การใช้ keyword IN

in keyword is pretty much like equal sign. But it can return true if some element does qualify.

How to use:
<text> in <text>

Example
"kumamon" in "kumamon is happy" # Returns True
"kumamoto" in "kumamon is happy" # Returns False

in is a tester that find the text within the text. Similarly to .find()

การเอา IN ไปใช้กับ array

Example

shopping_list = ['Apple', 'Banana', 'Peanut', 'Butter', 'Jelly']

"Apple" in shopping_list # Returns true
"Kumamon" in shopping_list # Returns false

การใช้ฟังก์ชั่น range()

การใช้ฟังก์ชั่นนี้ ก็จะคืนค่าออกมาเป็น list ที่มีตัวเลข (integer) เรียงตามที่ให้ parameter มา

How to use:
range(<stop>)
range(<start>, <stop>)
range(<start>, <stop>, <step>)

Example
range(10)       # Returns 0,1,2,3,4,5,6,7,8,9
range(1, 10)    # Returns 1,2,3,4,5,6,7,8,9,10
range(1, 10, 2) # Returns 2,4,6,8,10

range is a number array that continues the number as you like

ตารางเปรียบเทียบ

Loop Type / Sample EnvironmentForWhile
Requires to startAmount of loopsArgument that still true
Loop ControlUsing in, range() or arrayUsing break or making argument becomes false
Stop whenLoop amount is doneWhen argument is false
Made forExact number of loopsArgument that can become false

ลูป While

ลูปประเภท WHILE ก็คือการ วนเมื่อเงื่อนไขยังคงถูกต้อง และจะทำการหยุดเมื่อเงื่อนไขไม่เป็นจริงแล้ว หากน้องยังไม่เข้าใจก็ให้อ่านใหม่ครับ แต่ถ้าเข้าใจแล้วก็อ่านเรื่องต่อไปได้เลย

!> คำแนะนำ
เนื่องจากว่าอันนี้มันง่ายที่สุด พี่เลยแนะนำว่าให้มาลองเล่นอันนี้ให้่ชำนาญก่อนนะครับ ก่อนที่จะไปหา Loop อีกประเภทนึง

วิธีการใช้ WHILE loop

while <arguments>:
    # และจะรันโค้ดด้านล่างเมื่อ <argument> ยังเป็นจริง

ตัวอย่างเช่น

count = 10
while count > 5:
    print(count, end=" ")
    count = count - 1

ก็จะได้ค่าออกมาเป็น

10 9 8 7 6

Infinite Loop

น้องอาจจะยังไม่เข้าใจว่า Infinite Loop คืออะไร
1 Infinite Loop เป็นบ้านของ Apple ครับ

หยอกๆ Infinite Loop ก็คือ Loop ที่ัยังไม่จบนั่นเอง
เนื่องจากอะไรนั่นเหรอ ก็เพราะว่าเงื่อนไขยังไม่เป็นจริงซักทียังไงหล่ะ มันก็เลยเกิด

และเมื่อเกิดแล้ว น้องก็จะหยุดมันไม่ได้ครับ ยกเว้นว่าต้องทำการหยุดด้วยการ Terminate โปรแกรม

เอาเป็นว่าไปดูตัวอย่างดีกว่าครับ

kumamon = "cute"
while (kumamon = "cute"):
  print("You are in an infinite loop")

# Returns
You are in an infinite loop
You are in an infinite loop
You are in an infinite loop
You are in an infinite loop
...
...
...
...
# แล้วมันไม่หยุดเลยครับ จริงๆนะ

ถ้าสังเกตดีๆ บรรทัดแรกพี่ได้ประกาศตัวแปร kumamon ให้เท่ากับ "cute" มันก็ไม่มีอะไรแปลกประหลาด บรรทัดที่ 2 พี่ได้เขียนว่า "เมื่อตัวแปร kumamon เท่ากับ "cute" แล้วก็จะให้วน loop" ก็ไม่แปลกอะไร แล้ว loop ก็เรื่มครับ เพราะว่าเป็นจริง

แต่ว่า ไม่มีบรรทัดไหนมีการเปลี่ยนตัวแปร kumamon เลย ทำให้ "เมื่อตัวแปร kumamon เท่ากับ "cute" แล้วก็จะให้วน loop" ยังคงเป็นจริงอยู่ ทำให้วนอยู่แบบนี้แหละครับ ไม่มีใครหยุดมันเลย

คำสั่งอื่นๆที่เกี่ยวข้อง (Break & Continue)

เนื่องจากว่า น้องต้องการทำ loop แต่ก็อยากที่จะข้าม หรือหยุด loop เมื่อถึงเงื่อนไขที่น้องตั้งเพื่มขึ้นมานั่นเอง
ใน lecture นี้ก็จะสอน keyword ทืี่น้องเอาไว้คุม loop 2 อัน นั่นก็คือ

  • Break
  • Continue

Using break

เป็น keyword ที่ว่า เมื่อ loop ถึงบรรทัด break นี้ได้ก็จะทำการออก loop นั้นทันที

!> ข้อระวัง
ออกแค่ใน loop ที่ตัวเองอยู่ หากว่าอยู่ใน loop ซ้อน loop ก็จะออก loop ที่ตัวเองอยู่ แต่ไม่ได้ออก loop ที่วนอยู่ภายนอก

ตัวอย่างการใช้ break

kumamon = "cute"
age = 21

while (kumamon == "cute"):
    print("I am happy")
    age += 1

    if (age == 25):
        break

ก็จะออกผลมาว่า

I am happy
I am happy
I am happy
I am happy

เพราะได้วน 4 รอบ แต่ทำไมวนได้ 4 รอบหล่ะ

รอบแรกค่า age = 21 และก็ได้เพื่มในบรรทัดที่ 6 เป็น 22 ครับ และบรรทัดที่ 8 ก็ไม่เป็นจริง เพราะว่า 22 ไม่เท่ากับ 25 ครับ
รอบที่ 2 ก็เช่่นกัน age = 22 และก็ได้เพื่มในบรรทัดที่ 6 เป็น 23 ครับ และบรรทัดที่ 8 ก็ไม่เป็นจริง เพราะว่า 23 ไม่เท่ากับ 25 ครับ

วนไปถึงรอบที่ 4 age = 24 และก็ได้เพื่มในบรรทัดที่ 6 เป็น 25 ครับ และบรรทัดที่ 8 ก็เป็นจริง เพราะว่า 25 เท่ากับ 25 แล้ว จึงถึงบรรทัดที่มี break ได้ ทำให้โปรแกรมออกจาก loop มานั่นเอง

Using continue

โดยตัว continue นั้นมีความแตกต่างกับ break อยู่นิดเดียว นั่นก็คือ หากถึงบรรทัดนั่นแล้ว ก็จะกลับไปรัน loop ใหม่ โดยทำให้ข้ามบรรทัดที่จะทำงานหลังมันทันที

ถ้ายังไม่เข้าใจก็ไปดูกันครับ

i = 0
while (true):
    i += 1
    if (i == 5):
        continue

    print(i, end=" ") # ในบรรทัดนี้ พี่มงได้ใส่ parameter `end = " "` เข้าไปด้วย เพื่อให้มันปรี้นท์ " " แทนบรรทัดใหม่ครับ

print("Loop is complete!")

ก็จะแสดงผลออกมาดังนี้ครับ

"0 1 2 3 4 6 7 8 9 Loop is complete!"

น้องก็จะเห็นว่า พอ i = 5 แล้ว ก็จะไม่รันโค้ดด้านล่างเลย (บรรทัดที่ 7 เป็นต้นไป)
แต่เนื่องจากว่าบรรทัดที่ 9 นั้นไม่ได้อยู่ใน loop เลยรันได้อย่างปกติดี

พี่ก็เลยทำสรุปเอาไว้สำหรับ break และ continue ดังนี้ครับ

breakcontinue
เพื่อเอาไว้หยุด loopเรื่ม loop ใหม่ทันที
มีหน้าที่หลักคือเพื่อเอาไว้กัน infinite loopเพื่อหยุดให้ loop ทำงานในส่วนที่ไม่เกี่ยวข้อง
แก้ไขล่าสุด:
เขียนโดย: Kunanon Srisuntiroj