Python – while loop

while loop

การใช้ while loop นั้นจะดำเนินการเพื่อทำชุดคำสั่งใดๆ ซ้ำกันไปเรื่อยๆ หากเงื่อนไขที่กำหนดเมื่อตรวจสอบแล้วยังเป็นจริง(True)อยู่ เรามักจะใช้ while loop ในการทำชุดคำสั่งใดๆ ซ้ำในกรณีที่เราไม่รู้จำนวนรอบที่แน่นอนล่วงหน้าก่อนการสั่งดำเนินการ

โครงสร้างของลูป
while <test_condition>:
      <ระบุชุดคำสั่งที่ต้องการทำซ้ำ>
      ...

 

การใช้งาน while loop

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

โดยการทำงานของ while loop นั้นจะทำการตรวจสอบเงื่อนไขตรงส่วน <test_condition> ก่อน โดยหากผลการตรวจสอบเงื่อนไขเป็นจริง(True) ก็จะดำเนินการกับชุดคำสั่งที่ระบุ ซึ่งชุดคำสั่งกับเงื่อนไขจะแยกบล๊อกกันด้วยการย่อหน้า(indent) เมื่อดำเนินการตามชุดคำสั่งครบในหนึ่งรอบแล้วก็จะทำการตรวจสอบเงื่อนไขตรงส่วน <test_condition> ใหม่อีกครั้งหนึ่งเพื่อตัดสินใจว่าจะทำชุดคำสั่งที่กำหนดไว้ซ้ำหรือไม่ และการวนลูปนั้นจะหยุดก็ต่อเมื่อเงื่อนไขตรงส่วน <test_condition> มีผลเป็นเท็จ(false)

ใน python นั้นจะแปรผลค่าที่ไม่ใช่ 0 เป็น True ส่วนค่าที่เป็น None และ 0 ให้เป็น False

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

# ในกรณีที่ต้องการหาผลรวมของเลข 1, 2, 3, ..., 99, 10

data = range(1, 101) # กำหนดตัวแปรให้เก็บชุดข้อมูลโดยใช้ฟังก์ชัน range สร้างชุดข้อมูลซึ่งก็คือตัวเลขจาก 1-100
sum = 0 # กำหนดตัวแปรซึ่งไว้เก็บผลรวมของข้อมูล 
idx = 0 # กำหนดตัวแปรไว้บอกลำดับของข้อมูลที่ต้องการอ่าน

# ทำวนลูปบวกตัวเลขทั้งหมด โดยในแต่ละรอบจะดึงข้อมูลตัวเลขออกมา 1 ตัวตามลำดับของข้อมูล แล้วนำตัวเลขดังกล่าวไปบวกกับผลรวมของข้อมูลจากตัวแรกถึงตัวก่อนหน้า
while idx<len(data):

	# นำตัวเลขที่ตำแหน่งปัจจุบัน ไปบวกกับผลรวมของตัวเลขตัวแรกถึงตัวก่อนหน้า
	sum = sum+data[idx]

	# เพิ่มลำดับเพื่อจะชี้ตำแหน่งของข้อมูลที่ทำการอ่าน
	idx = idx+1

print("ผลรวมของ 1+2+3+..+99+100 คือ {}".format(sum))
# โปรแกรมจะทำการปรินต์ค่า ผลรวมของ 1+2+3+..+99+100 คือ 5050

จากตัวอย่าง หากต้องการหาผลรวมของตัวเลขจาก 1-100 (โดยหากเราไม่ทราบมาก่อนว่าสามารถหาผลรวมจากตัวเลขชุดดังกล่าวจาก N*(N-1)2 ซึ่ง N แทนเลขตัวสุดท้ายในชุดข้อมูล) การทำการบวกตัวเลขจำนวน 100 ตัวอาจจะต้องใช้เวลาค่อนข้างมาก ซึ่งเราสามารถใช้การเขียนโปรแกรมเพื่อหาผลรวมของเลขชุดดังกล่าวได้จากการใช้ while loop ดังตัวอย่าง

การใช้งาน while loop กับ else

วิธีการใช้ ใช้งาน while loop กับ else จะคล้ายกันกับที่ได้กล่าวถึงใน for loop โดยเราสามารถจะใช้ else ร่วมด้วยได้ โดยโปรแกรมจะไปทำงานในส่วนของ else ก็ต่อเมื่อเงื่อนไขที่ระบุไว้ให้กับ while loop นั้นเป็นเท็จ(False)
ตัวอย่างการใช้งาน

saving_in_week = [20, 10, 30, 10, 15, 5, 7] # กำหนดตัวแปรเพื่อเก็บข้อมูลเงินออม(บาท) ที่เก็บได้ใน 1 สัปดาห์
total = 0 # กำหนดตัวแปรเพื่อเก็บข้อมูลเงินออมรวมทั้งหมดใน 1 สัปดาห์
idx = 0 # กำหนดตัวแปรเพื่อบอกลำดับของวันที่ต้องการดึงข้อมูล

# ทำการวนลูปเพื่อรวมเงินออม
while idx<len(saving_in_week) :

	# หาค่าของผลเงินออมจากวันแรกจนถึงวันที่ในลำดับปัจจุบัน
	total = total + saving_in_week[idx]

	# ปรินต์ค่าข้อมูลเงินออมที่ได้ในแต่ละวันตามลำดับ
	print( "วันที่ {}: ออมได้: {} บาท".format( idx+1, saving_in_week[idx]) )

	# เพิ่มลำดับเพื่อจะชี้ตำแหน่งของข้อมูลที่ทำการอ่าน
	idx = idx+1

else:
	print("เงินออมทั้งหมดภายใน 1 สัปดาห์ รวมเป็นจำนวนเงินทั้งหมด {} บาท".format(total))

# โปรแกรมจะทำการปรินต์ค่า
# วันที่ 1: ออมได้: 20 บาท
# วันที่ 2: ออมได้: 10 บาท
# วันที่ 3: ออมได้: 30 บาท
# วันที่ 4: ออมได้: 10 บาท
# วันที่ 5: ออมได้: 15 บาท
# วันที่ 6: ออมได้: 5 บาท
# วันที่ 7: ออมได้: 7 บาท
# เงินออมทั้งหมดภายใน 1 สัปดาห์ รวมเป็นจำนวนเงินทั้งหมด 97 บาท

จากตัวอย่างโปรแกรมจะทำการคำนวณเงินออมจากข้อมูลเงินออมของแต่ละวันใน 1 สัปดาห์ โดยในแต่ละรอบของลูป จะทำการดึงข้อมูลเงินออมแต่ละวันออกมาและนำไปรวมกับผลรวมของเงินออมทั้งหมดตั้งแต่วันแรกจนถึงวันก่อนหน้า วนรอบจนครบตามจำนวนวันที่มีข้อมูลอยู่ เมื่อดึงข้อมูลมาจนครบโปรแกรมจะทำงานในส่วนของชุดคำสั่งภายในบล๊อก else ซึ่งทำการปรินท์ข้อมูลเงินออมทั้งหมด

การใช้งาน while loop กับ break

วิธีการใช้ ใช้งาน while loop กับ break จะคล้ายกันกับที่ได้กล่าวถึงใน for loop โดยเราสามารถจะออกจาก while loop ได้ด้วยคำสั่ง break (หากออกจากการทำงานของ while loop ด้วยคำสั่ง break แล้ว ชุดคำสั่งที่ระบุภายใน else ก็จะไม่ทำงานด้วย )
ตัวอย่างการใช้งาน

item_prices = [250, 200, 150, None, 150, 300, None] # กำหนดตัวแปรเพื่อเก็บข้อมูลราคาสินค้าแต่ละชนิดตามลำดับ
total = 0 # กำหนดตัวแปรเพื่อเก็บข้อมูลราคารวมสินค้า
idx = 0 # กำหนดตัวแปรเพื่อบอกลำดับของสินค้า

# ทำการวนลูปเพื่อหาราคารวมสินค้าทั้งหมด
while idx<len(item_prices) :

	# อ่านข้อมูลราคาสินค้าลำดับปัจจุบัน
	item_price = item_prices[idx]

	# ทำการตรวจสอบว่า ข้อมูลที่อ่านมานั้นได้ระบุราคาสินค้าถูกต้องหรือไม่
	if item_price is None:
		print("สินค้าลำดับที่ {}: ไม่ได้ทำการระบุราคาสินค้า(กรุณาตรวจสอบ)".format(idx+1))
		break

	# นำข้อมูลราคาสินค้าลำดับปัจจุบัน ไปรวมเข้ากับผลรวมราคาสินค้าจากชิ้นแรกจนถึงชิ้นก่อนหน้าชิ้นปัจจุบัน
	total = total + item_price

	# ปรินต์ค่าข้อมูลราคาสินค้าในลำดับปัจจุบัน
	print( "สินค้าลำดับที่ {}: {} บาท".format( idx+1, item_prices[idx]) )

	# เพิ่มลำดับเพื่อจะชี้ตำแหน่งของข้อมูลราคาสินค้าปัจจุบันที่ทำการอ่าน
	idx = idx+1

else:
	print("ราคารวมสินค้าทั้งหมด {} บาท".format(total))

# สินค้าลำดับที่ 1: 250 บาท
# สินค้าลำดับที่ 2: 200 บาท
# สินค้าลำดับที่ 3: 150 บาท
# สินค้าลำดับที่ 4: ไม่ได้ทำการระบุราคาสินค้า(กรุณาตรวจสอบ)

จากตัวอย่างโปรแกรมจะทำการคำนวณราคาสินค้าทั้งหมดที่ระบุไว้ในรายการ โดยแต่ละรอบจะทำการดึงข้อมูลราคาสินค้าในลำดับนั้นออกมา แล้วนำข้อมูลราคาสินค้ามารวมกับผลรวมของราคาสินค้าตั้งแต่ชิ้นแรกจนถึงชิ้นก่อนหน้า หากโปรแกรมสามารถอ่านข้อมูลจนถึงข้อมูลสุดท้าย เมื่อเสร็จสิ้นการทำงานในรอบสุดท้าย โปรแกรมจะทำชุดคำสั่งในบล๊อก else ซึ่งจะทำการปรินท์ค่าของราคารวมสินค้าทั้งหมดในรายการออกมา

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

ที่มาของข้อมูล: https://www.programiz.com/python-programming/while-loop