4: Repetition

4-2: while

** ถ้าใช้งานบนมือถือหรือ tablet แนะนำให้ใช้ Chrome หรือ Safari เท่านั้น **

แบบฝึกหัด 4-2 ข้อที่ 1

ให้เขียนโปรแกรมรับจำนวนเต็ม n จาก input เพื่อแสดงจำนวนเต็มคี่ตั้งแต่ 1 ถึงจำนวนคี่ที่ไม่เกิน n (โดยใช้วงวน while)

___inp___ = ["1"] def input(): return ___inp___[0] n = int(input()) i = 1 while i <= n: print(i) i += 2 Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") for v in [1,3,5,13, 29,30]: Ex().has_equal_output(pre_code="___inp___[0]='"+str(v)+"'", incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
ใช้วงวน while ควบคุมการเปลี่ยนค่า i จาก 1 ถึง n โดนเพิ่ม i รอบละ 2 แล้วนำ i ไปแสดง
แบบฝึกหัด 4-2 ข้อที่ 2

ข้อมูลที่ input มีบรรทัดแรกเป็นจำนวนเต็ม n ตามด้วยอีก n บรรทัดเป็นจำนวนเต็ม d0, d1, ..., dn-1 บรรทัดละจำนวน จงเขียนโปรแกรมอ่านข้อมูลจาก input (โดยใช้วงวน while) เพื่อหาผลรวมของ d0, d1, ..., dn-1

___inp___ = ["1","2"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t n = int(input()) n = int(input()) k = 0 s = 0 while k < n: s += int(input()) k += 1 print(s) Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") for v in ["0", "3789", "6123456"]: Ex().has_equal_output(pre_code="___inp___[:] = "+str(list(v)), incorrect_msg = "ผิด เช่น กรณีบรรทัดแรกคือ " + str(v[0]) + ("" if v[0] == "0" else " ตามด้วย " + " ".join(v[1:]) + " บรรทัดละจำนวน"))
แบบฝึกหัด 4-2 ข้อที่ 3

ข้อมูลจาก input เป็นจำนวนเต็ม บรรทัดละจำนวน จงเขียนโปรแกรมรับข้อมูลจาก input (โดยใช้วงวน while) เพื่อหาผลรวมของจำนวนที่อ่านเข้ามา จนพบจำนวนลบ (ไม่รวมจำนวนลบ)

___inp___ = [str(e) for e in range(20,-1,-1)] + ["-1"] + \ [str(e) for e in range(5,0,-1)] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t s = 0 x = int(input()) while x >= 0: s += x x = int(input()) print(s) Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") Ex().has_equal_output(incorrect_msg = "ยังไม่ถูก")
แบบฝึกหัด 4-2 ข้อที่ 4

ข้อมูลจาก input เป็นจำนวนเต็ม บรรทัดละจำนวน จนถึงบรรทัดสุดท้ายจะเป็นคำว่า end จงเขียนโปรแกรมรับข้อมูลจาก input (โดยใช้วงวน while) เพื่อหาผลรวมของจำนวนที่อ่านเข้ามา จนพบคำว่า end

___inp___ = [str(e) for e in range(20,-1,-1)] + ["end"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t s = 0 x = input() while x != "end": s += int(x) x = input() print(s) Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") Ex().has_equal_output(incorrect_msg = "ยังไม่ถูก")
อย่าใช้ int(input()) ควรใช้ input() อ่านเป็นสตริงก่อน เพื่อเปรียบเทียบว่า ไม่ใช่ "end" แล้วค่อยเปลี่ยนเป็น int
แบบฝึกหัด 4-2 ข้อที่ 5

อ่านจำนวนเต็ม n จาก input แล้วเขียนคำสั่งเพื่อคำนวณและแสดงค่าของ \(\sum_{i=1}^n i^5\) (โดยใช้วงวน while)

___inp___ = ["1"] def input(): return ___inp___[0] n = int(input()) s = 0 i = 1 while i <= n: s += i**5 i += 1 print(s) Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") for v in [1,3,5,10]: Ex().has_equal_output(pre_code="___inp___[0] ='"+str(v)+"'", incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
ใช้วงวน while ควบคุมการเปลี่ยนค่า i จาก 1 ถึง n แล้วนำ i ไปหาผลรวมตามสูตร
แบบฝึกหัด 4-2 ข้อที่ 6

อ่านสตริง t จาก input เพื่อนับและแสดงว่ามีสระใน t กี่ตัว (นับทั้งตัวเล็กและตัวใหญ่ โดยใช้วงวน while) เช่น Anna มีสระเป็นจำนวน 2 ตัว แบบฝึกหัดของบทก่อน เราจำกัดขนาดของ t แค่ 5 ตัวอักษร แล้วก็ยังไม่ได้เรียนเรื่องวงวน ก็เขียนเป็นคำสั่งได้ดังข้างล่างนี้ จะเห็นว่ามีคำสั่งที่ทำงานในรูปแบบซ้ำ ๆ กัน ก็นำมาทำในวงวนได้

            t = input()
            c = 0
            vowels = "aeiouAEIOU"
            if t[0] in vowels:
                c += 1
            if t[1] in vowels:
                c += 1
            if t[2] in vowels:
                c += 1
            if t[3] in vowels:
                c += 1
            if t[4] in vowels:
               c += 1
            print(c)
            

___inp___ = ["1"] def input(): return ___inp___[0] t = input() t = input() c = 0 vowels = "aeiouAEIOU" k = 0 while k < len(t): if t[k] in vowels: c += 1 k += 1 print(c) Ex().check_while(missing_msg="ควรฝึกใช้วงวน while") for v in ['', 'Annotation', 'Krungthepmahanakorn', 'bcdfghjklmnpqrstvwxyz', 'AEIUOaeiuo']: Ex().has_equal_output(pre_code = "___inp___[0]='"+v+"'", incorrect_msg = "ผิด เช่น t = '" + v + "'")
ใช้วงวน while เปลี่ยนค่า index จากตัวซ้ายสุดไปตัวขวาสุด แล้วหยิบมาทดสอบว่าเป็นสระหรือไม่ ถ้าใช่ก็นับ