วิธีจำลอง Do-While Loops ใน Python

เผยแพร่แล้ว: 2022-08-31

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีจำลอง do-while loop ใน Python

ในภาษาการเขียนโปรแกรมใด ๆ ลูปช่วยให้คุณดำเนินการบางอย่างซ้ำ ๆ ขึ้นอยู่กับเงื่อนไขการวนซ้ำ Python รองรับโครงสร้าง while และ for loop แต่ไม่รองรับการวนซ้ำ do-while โดยกำเนิด

อย่างไรก็ตาม คุณสามารถจำลองลูป do-while ได้ด้วยการทำความเข้าใจวิธีการทำงาน โดยใช้คำสั่งควบคุมลูปและลูปที่มีอยู่ใน Python

คุณจะได้เรียนรู้วิธีดำเนินการนี้ในอีกไม่กี่นาทีข้างหน้า เอาล่ะ!

Do-While Loop Construct คืออะไร?

Do-While Loop Construct คืออะไร

หากคุณตั้งโปรแกรมในภาษาเช่น C หรือ C++ คุณอาจเจอโครงสร้างลูป do-while

ในลูป do-while ชุดของคำสั่งในเนื้อหาของลูป—ภายในบล็อกที่คั่นด้วยเครื่องหมายปีกกา—จะถูกดำเนินการก่อน จากนั้นจึงตรวจสอบเงื่อนไขการวนซ้ำ

คุณสามารถเรียกใช้ตัวอย่าง C ต่อไปนี้ในคอมไพเลอร์ C ออนไลน์ของ Geekflare ได้จากเบราว์เซอร์ของคุณโดยตรง

พิจารณาข้อมูลโค้ดต่อไปนี้:

 //do_while_example1 #include <stdio.h> int main() { int count = 1; printf("Do-While loop: \n"); do{ printf("Loop runs..."); }while(count<0); return 0; }

นี่คือผลลัพธ์

 Output Do-While loop: Loop runs...

ในตัวอย่างข้างต้น:

  • ค่าของการ count คือ 1 และเงื่อนไขการวนซ้ำคือ count < 0 อย่างไรก็ตาม การวนซ้ำจะทำงานเพียงครั้งเดียวแม้ว่าเงื่อนไขการวนซ้ำจะเป็น False ในขั้นต้น
  • สิ่งนี้ตรงกันข้ามกับลูป while ที่ดำเนินการเฉพาะเมื่อเงื่อนไขการวนซ้ำเป็น True ในตอนแรก
 //while_example1 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<0){ printf("Loop runs..."); } return 0; }

ดังที่กล่าวไว้ เงื่อนไขการวนซ้ำ การ count < 0 เป็น False ในขั้นต้น ตัวแปรการ count ถูกเริ่มต้นเป็น 1 ดังนั้นเมื่อรวบรวมและรันโค้ดด้านบน เราจะเห็นว่าคำสั่งใน while loop body จะไม่ถูกดำเนินการ

 Output While loop: //loop body does not run!

ในขณะที่ vs. ทำในขณะที่: ภาพรวมของความแตกต่าง

มาดูความแตกต่างระหว่างลูป while และ do-while กันดีกว่า

ในขณะที่ vs ทำในขณะที่: ภาพรวมของความแตกต่าง

พิจารณาตัวอย่างนี้:

 //do_while_example2 #include <stdio.h> int main() { int count = 1; printf("Do-while loop: \n"); do{ printf("%d\n",count); count++; }while(count<5); return 0; }

ในเซลล์รหัสด้านบน:

  • ตัวแปรการ count เริ่มต้นเป็น 1
  • เราใช้ลูป do-while
  • ตัวแปรการ count จะเพิ่มขึ้น 1 ระหว่างแต่ละรอบผ่านลูป และเงื่อนไขการวนซ้ำถูกตั้งค่าให้ count < 5

ต่อไปนี้คือคำอธิบายภาพว่าการดำเนินการเกิดขึ้นอย่างไร: do-while loop ทำงานอย่างไร และตรวจสอบเงื่อนไขการวนซ้ำสี่ครั้ง

do-while-loop-example
 Output Do-while loop: 1 2 3 4

หากคุณใช้ while loop แทน นี่คือสิ่งที่เรามี

 //while_example2 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<5){ printf("%d\n",count); count++; }; return 0; }

รูปด้านล่างอธิบายการทำงานของลูป while ในตัวอย่างนี้ while loop ตรวจสอบเงื่อนไขการวนซ้ำห้าครั้ง

while-loop-example
 Output While loop: 1 2 3 4

แม้ว่าผลลัพธ์สำหรับลูปด้านบนและ do-while จะเหมือนกัน แต่ก็มีความแตกต่างเล็กน้อย

ในอีกสักครู่ การตรวจสอบเงื่อนไขจะมาก่อน ตามด้วยเนื้อหาของลูป ดังนั้นหากคุณต้องการให้ลูปรัน K ครั้ง ควรมี K รันตรงที่เงื่อนไขการวนซ้ำเป็น True ในการวนซ้ำหมายเลข K+1 เงื่อนไขจะกลายเป็น False และตัวควบคุมจะแยกออกจากลูป

ในทางกลับกัน ถ้าคุณใช้ลูป do-while: เงื่อนไขการวนซ้ำจะถูกตรวจสอบเป็นครั้งที่ K-th หลังจากที่ K ผ่านลูปเท่านั้น

เหตุใดการปรับปรุงส่วนเพิ่มนี้จึงมีประโยชน์

สมมติว่าเงื่อนไขการวนซ้ำมีราคาแพงในการคำนวณ เช่น เกี่ยวข้องกับการเรียกฟังก์ชันแบบเรียกซ้ำ การดำเนินการทางคณิตศาสตร์ที่ซับซ้อน และอื่นๆ

ในกรณีเช่นนี้ สำหรับการทำซ้ำ K ของเนื้อหาลูป จะเป็นประโยชน์หากใช้ลูป do-while แทน

ขณะ vs. ขณะทำอย่างย่อ

มาจัดตารางความแตกต่างที่สำคัญที่เราได้เรียนรู้กัน

ในขณะที่ลูป ทำในขณะที่วนรอบ
ตรวจสอบเงื่อนไขการวนซ้ำ: ก่อนการดำเนินการของเนื้อความวนรอบ ตรวจสอบเงื่อนไขการวนซ้ำ: หลังจากดำเนินการของ loop body
หากเงื่อนไขเป็น False ในตอนแรก เนื้อหาลูปจะไม่ถูกดำเนินการ หากเงื่อนไขเป็น False ในตอนแรก เนื้อหาของลูปจะดำเนินการ เพียงครั้งเดียว เท่านั้น
มีการตรวจสอบเงื่อนไขการวนซ้ำ K ครั้งสำหรับ K ที่ผ่านลูป มีการตรวจสอบเงื่อนไขการวนซ้ำ K-1 ครั้งสำหรับ K ที่ผ่านลูป
ควรใช้ while loop เมื่อใด
– ลูปควรทำงานตราบเท่าที่เงื่อนไขเป็น True
– สำหรับลูปควบคุมการเข้า
– เมื่อเงื่อนไขการวนซ้ำไม่แพงในการคำนวณ
ควรใช้ลูป do-while เมื่อใด
– ลูปควรรันอย่างน้อยหนึ่งครั้งสำหรับเงื่อนไขการวนซ้ำเท็จเริ่มต้น
– สำหรับลูปควบคุมทางออก
– เมื่อเงื่อนไขการวนซ้ำมีราคาแพงในการคำนวณ

การจำลองพฤติกรรม Do-While ใน Python

จากส่วนก่อนหน้านี้ เรามีสองเงื่อนไขต่อไปนี้เพื่อจำลองลูป do-while:

  • คำสั่งใน loop body ควรดำเนินการ อย่างน้อยหนึ่งครั้ง ไม่ว่าเงื่อนไขการวนซ้ำจะเป็น True หรือ False
  • ควรตรวจสอบเงื่อนไขหลังจากดำเนินการคำสั่งในเนื้อหาของลูป หากเงื่อนไขเป็น False ตัวควบคุมควรแยกออกจากลูป: exit control

ไม่มีที่สิ้นสุดในขณะที่คำสั่งวนและแบ่งใน Python

do-while-python

คุณสามารถกำหนด infinite while loop ใน Python ดังที่แสดงด้านล่าง

 while True: pass # Instead of True, you can have any condition that is always True while always-True-condition: pass

คำสั่ง break สามารถใช้เพื่อแยกออกจาก loop body และโอนการควบคุมไปยังคำสั่งแรกนอก loop body

 while <condition>: if <some-condition>: break

ในตัวอย่างแรกสุดของ do-while loop ใน C เงื่อนไขในการวนซ้ำคือ count < 0 ดังนั้นเงื่อนไขที่จะแยกจากลูปคือค่าการนับเป็นศูนย์หรือมากกว่าศูนย์ ( count >= 0 )

นี่คือการจำลอง do-while loop ใน Python:

 count = 1 while True: print("Loop runs...") if(count >= 0): break

Python Do-While ตัวอย่างลูป

เราจะทบทวนตัวอย่างจากส่วนก่อนหน้าและเขียนใหม่ใน Python โดยจำลอง do while loop

#1 . มาทบทวนตัวอย่างกัน: การพิมพ์ค่าของตัวแปรการ count ออกมาเมื่อ count มีค่าน้อยกว่าห้า

เรารู้วิธีกำหนด infinite loop เพื่อให้ loop body ทำงานอย่างน้อยหนึ่งครั้ง

การวนซ้ำควรดำเนินต่อไปตราบเท่าที่การนับน้อยกว่าห้า ดังนั้น เมื่อนับถึงห้า เราควรแยกวง ดังนั้น count == 5 คือเงื่อนไขการควบคุมทางออก

เมื่อนำมารวมกัน เราได้:

 count = 1 while True: print(f"Count is {count}") count += 1 if count==5: break
 Output Count is 1 Count is 2 Count is 3 Count is 4

#2 . นอกจากนี้เรายังสามารถเขียนเกมเดาตัวเลขใหม่เป็น Python do-while construct

ในเกมการเดาตัวเลข เราตรวจสอบการเดาของผู้ใช้กับหมายเลขลับที่กำหนดไว้ล่วงหน้า ผู้ใช้ควรเดาหมายเลขลับภายในจำนวนครั้งสูงสุดที่อนุญาต เช่น max_guesses

รหัสควรแจ้งให้ผู้ใช้ป้อนข้อมูล โดยไม่คำนึงว่าการเดาของพวกเขาถูกหรือผิด เราสามารถทำได้โดยใช้ infinite while loop

แล้วเมื่อไหร่ที่เราควรแยกตัวออกจากวง?

ตัวควบคุมควรแยกออกจากลูปเมื่อสิ่งใดสิ่งหนึ่งต่อไปนี้เกิดขึ้น:

  1. เมื่อผู้ใช้ทายเลขได้แล้ว
  2. เมื่อผู้ใช้ยังไม่ได้เดาตัวเลข แต่หมดจำนวนการเดาที่มีอยู่แล้ว จำนวนการเดาที่ไม่ถูกต้องโดยผู้ใช้ = max_guesses

เซลล์รหัสด้านล่างแสดงให้เห็นว่าเราสามารถทำได้อย่างไร

 import random low, high = 5,50 secret_number = random.choice(range(low,high)) max_guesses = 10 num_guesses = 0 while True: guess = int(input("\nGuess a number:")) num_guesses += 1 conditions = [num_guesses==max_guesses,guess==secret_number] if any(conditions): break

แทนที่จะแยกจากลูป เราสามารถเพิ่มคำสั่ง print() ที่อธิบายได้เมื่อเราพบแต่ละเงื่อนไขข้างต้นแล้วแยกออกจากลูป

 import random low, high = 5,50 secret_number = random.choice(range(low,high)) print(secret_number) max_guesses = 10 num_guesses = 0 while True: guess = int(input("\nGuess a number:")) num_guesses += 1 if guess==secret_number: print("Congrats, you guessed it right!") break if num_guesses==max_guesses: print("Sorry, you have no more guesses left!") break

เอาต์พุตตัวอย่างสองรายการแสดงอยู่ด้านล่าง

ในเอาต์พุตตัวอย่างนี้ คำสั่ง break จะแยกออกจากลูปเมื่อผู้ใช้เดาหมายเลขลับได้อย่างถูกต้อง

 # Sample output when secret_number = 43 and user gets it right! Guess a number:4 Guess a number:3 Guess a number:43 Congrats, you guessed it right!

นี่คือตัวอย่างเอาต์พุตอื่นเมื่อผู้ใช้ถึงจำนวนการเดาสูงสุดที่มี แต่ไม่สามารถเดาหมายเลขลับได้อย่างถูกต้อง

 # Sample output when secret_number = 33 and user fails to guess it right! Guess a number:3 Guess a number:15 Guess a number:21 Guess a number:50 Guess a number:17 Guess a number:6 Guess a number:18 Guess a number:5 Guess a number:12 Guess a number:43 Sorry, you have no more guesses left!

บทสรุป

ฉันหวังว่าบทช่วยสอนนี้จะช่วยให้คุณเข้าใจวิธีจำลองการวนซ้ำ do-while ใน Python

นี่คือประเด็นสำคัญ:

  • ใช้การวนซ้ำแบบอนันต์เพื่อให้แน่ใจว่าเนื้อความของลูปทำงานอย่างน้อยหนึ่งครั้ง อาจเป็นลูปอนันต์เล็กน้อยเช่นในขณะที่ True หรืออาจเป็น ในขณะที่ <condition> ซึ่งเงื่อนไขจะเป็น True เสมอ
  • ตรวจสอบเงื่อนไขการ ออก ภายในลูปและใช้คำสั่ง break เพื่อแยกออกจากลูปภายใต้เงื่อนไขเฉพาะ

ต่อไป เรียนรู้วิธีใช้ลูปและฟังก์ชัน enumerate() ใน Python