4: Repetition

4-4: for i in range

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

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

เขียนโปรแกรมตามผังงานข้าง ๆ นี้

___inp___ = ["10"] def input(): return ___inp___[0] n = int(input()) s = 0 for i in range(n): s += i print(s) obj = Ex().check_for_loop(missing_msg="ต้องใช้วงวน for ตามผังงาน") obj.check_iter().has_equal_value( incorrect_msg = "ควรใช้ range และเขียนค่าข้างในให้ถูกตามผังงาน") for v in [0, 1, 5, 113]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 2

เขียนโปรแกรมตามผังงานข้าง ๆ นี้

___inp___ = ["10"] def input(): return ___inp___[0] n = int(input()) s = 0 for i in range(1,n+1): if i%2 == 0: s += i s += i print(s) obj = Ex().check_for_loop(missing_msg="ต้องใช้วงวน for ตามผังงาน") obj.check_iter().has_equal_value( incorrect_msg = "ควรใช้ range และเขียนค่าข้างในให้ถูกตามผังงาน") for v in [0, 1, 5, 113]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 3

เขียนโปรแกรมตามผังงานข้าง ๆ นี้

___inp___ = ["10"] def input(): return ___inp___[0] n = int(input()) s = 0 k = 1 for i in range(n,0,-1): if i%2 == 0: s += i*k else: s -= k k += 2 s += i*k print(s) obj = Ex().check_for_loop(missing_msg="ต้องใช้วงวน for ตามผังงาน") obj.check_iter().has_equal_value( incorrect_msg = "ควรใช้ range และเขียนค่าข้างในให้ถูกตามผังงาน") for v in [0, 1, 5, 113]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 4

อ่านจำนวนเต็ม a, b และ c จาก input แล้วแสดงจำนวนเต็มที่มีค่า a, a+c, a+2c, ... บรรทัดละหนึ่งค่า โดยจะหยุดแสดงเมื่อค่าที่คำนวณมากกว่าหรือเท่ากับ b เช่น a=2, b=7, c=2 จะแสดง 2, 4 และ 6 บรรทัดละค่า

___inp___ = ["6 50 7"] def input(): return ___inp___[0] x = input().split() a = int(x[0]) b = int(x[1]) c = int(x[2]) for i in range(a, b, c): print(i) obj = Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") obj.check_iter().has_equal_value( incorrect_msg = "ควรใช้ range และเขียนค่าข้างในให้ถูกต้อง") for v in ["0 1 1", "0 5 2", "7 40 3"]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณีอินพุตคือ " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 5

อ่านจำนวนเต็มไม่ติดลบ m จาก input แล้วแสดงจำนวนเต็มที่มีค่าตั้งแต่ -m จนถึง m บรรทัดละหนึ่งค่า

___inp___ = ["10"] def input(): return ___inp___[0] m = int(input()) for i in range(-m, m+1): print(i) obj = Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") obj.check_iter().has_equal_value( incorrect_msg = "ควรใช้ range และเขียนค่าข้างในให้ถูกต้อง") for v in ["0", "7", "21"]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณีอินพุตคือ " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 6

อ่านจำนวนเต็มไม่ติดลบ m จาก input แล้วแสดงเฉพาะจำนวนเต็มคู่ที่มีค่าตั้งแต่ -m จนถึง m บรรทัดละหนึ่งค่า

___inp___ = ["1"] def input(): return ___inp___[0] m = int(input()) s = -m; t = m if m%2 == 1: s += 1 t -= 1 for i in range(s, t+1, 2): print(i) for v in ["0", "4", "21"]: precode = "___inp___[0] ='"+str(v)+"'" Ex().has_equal_output(pre_code=precode, incorrect_msg = "ผิด เช่น กรณีอินพุตคือ " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 7

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

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

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

___inp___ = ["1","2"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t n = int(input()) n = int(input()) s = 0 for k in range(n): s += int(input()) print(s) Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") 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-4 ข้อที่ 9

มีรายการของจำนวนเต็มในบรรทัดเดียวกันของ input เช่น 10 20 30 55 จงเขียนชุดคำสั่งอ่านจำนวนเต็มเหล่านี้เก็บใส่ตัวแปรชื่อ a ที่เป็นลิสต์ จากนั้นสร้างลิสต์ของจำนวนจริงมีขนาดเท่ากับของ a แต่ละช่องเก็บค่าครึ่งหนึ่งของที่เก็บใน a เช่น อ่านข้อมูลได้ a = [10,20,30,55] แล้วก็สร้าง b = [5.0, 10.0, 15.0, 27.5]

___inp___ = ["1 2 3 4 5"] def input(): return ___inp___[0] x = input().split() a = [0]*len(x) for i in range(len(x)): a[i] = int(x[i]) b = [0.0]*len(x) for i in range(len(a)): b[i] = a[i]/2 Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") obj = Ex().check_object('a', missing_msg="ไม่มีตัวแปร a") obj.has_equal_value(incorrect_msg = "a มีค่าไม่ตรงตามโจทย์") obj.has_equal_value(expr_code="type(a)", incorrect_msg="a ต้องเป็น list") obj.has_equal_value(expr_code="[type(e) for e in a]", incorrect_msg="a ต้องเป็นลิสต์ของจำนวนเต็ม") obj = Ex().check_object('b', missing_msg="ไม่มีตัวแปร b") obj.has_equal_value(incorrect_msg = "b มีค่าไม่ตรงตามโจทย์") obj.has_equal_value(expr_code="type(b)", incorrect_msg="b ต้องเป็น list") obj.has_equal_value(expr_code="[type(e) for e in b]", incorrect_msg="b ต้องเป็นลิสต์ของจำนวนจริง")
อ่านด้วย input().split() จะรู้จำนวนตัว, สร้าง a ที่เป็นลิสต์ของจำนวนเต็มให้มีขนาดเท่ากับที่อ่านมา, จากนั้นใน for ค่อย ๆ แปลงเป็น int ไปเก็บ
แบบฝึกหัด 4-4 ข้อที่ 10

อ่านจำนวนเต็ม n จาก input แล้วแสดงรูปสามเหลี่ยมดังตัวอย่างข้าง ๆ นี้

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

อ่านจำนวนเต็ม n จาก input แล้วแสดงรูปสามเหลี่ยมดังตัวอย่างข้าง ๆ นี้

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

อ่านจำนวนเต็ม n จาก input แล้วแสดงรูปสามเหลี่ยมดังตัวอย่างข้าง ๆ นี้

___inp___ = ["5"] def input(): return ___inp___[0] n = int(input()) for i in range(1,n+1): print(" "*(n-i) + "*"*i) Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") for v in [1,4,7,10]: Ex().has_equal_output(pre_code="___inp___[0] ='"+str(v)+"'", incorrect_msg = "ผิด เช่น กรณี n = " + str(v))
แบบฝึกหัด 4-4 ข้อที่ 13

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

___inp___ = ["1"] def input(): return ___inp___[0] t = input() t = input() c = 0 vowels = "aeiouAEIOU" for k in range(len(t)): if t[k] in vowels: c += 1 print(c) Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") for v in ['', 'Annotation', 'Krungthepmahanakorn', 'bcdfghjklmnpqrstvwxyz', 'AEIUOaeiuo']: Ex().has_equal_output(pre_code = "___inp___[0]='"+v+"'", incorrect_msg = "ผิด เช่น t = '" + v + "'")
แบบฝึกหัด 4-4 ข้อที่ 14

อ่านสตริง t จาก input แล้วนับและแสดงว่ามีสตริงย่อย "ABC" อยู่ภายในกี่ตำแหน่ง เช่น "ABCabcAABCABAABC" มี "ABC" อยู่ 3 ตำแหน่ง

___inp___ = ["ABcxABCxABCcCA"] def input(): return ___inp___[0] t = input() c = 0 for i in range(len(t)-2): if t[i:i+3] == "ABC": c += 1 print(c) Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") for v in ['', 'A', 'AB', 'ABc', 'ABC', "ABcABCxAxBABC"]: Ex().has_equal_output(pre_code = "___inp___[0]='"+v+"'", incorrect_msg = "ผิด เช่น t = '" + v + "'")
ใช้วงวน for เปลี่ยนค่า i เพิ่มค่าจาก 0 จนถึง len(t)-3 แล้วใช้นำ slice i:i+3 ของ t ไปเปรียบเทียบ
แบบฝึกหัด 4-4 ข้อที่ 15

อ่านสตริง t จาก input มาหนึ่งบรรทัด แล้วก็อ่านสตริง s จาก input อีกหนึ่งบรรทัด จากนั้นนับและแสดงว่า มีสตริงของ s อยู่ภายในสตริงของ t กี่ตำแหน่ง เช่น t = "ABCabcAABCABAABC" และ s = "ABC" จะแสดง 3

___inp___ = ["XYXYZXYZZXXYZXYZZZZXY", "XYZZ"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t t = input() s = input() c = 0 for i in range(len(t)-len(s)+1): if t[i:i+len(s)] == s: c += 1 print(c) Ex().check_for_loop(missing_msg="ควรฝึกใช้วงวน for") for v in [['','A'], ['A','A'], ['AB', 'ABC'], ["ABCcABCCxABCCxBABC", "ABCC"]]: Ex().has_equal_output(pre_code = "___inp___[:]="+str(v), incorrect_msg = "ผิด เช่น t = '" + v[0] + "'; s ='" + v[1] + "'")