5: List Processing

5-2: List Method

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

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

อ่านจำนวนเต็มจาก input เก็บใน n จากนั้นสร้างลิสต์ a ให้มีค่าเป็น [12, 22, 32, ..., n2]

___inp___ = ["10"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t print(a) n = int(input()) a = [] for i in range(1,n+1): a.append(i**2) for v in [["10"], ["0"], ["5"]] : Ex().has_equal_value(pre_code="___inp___[:] =" + str(v), name="n", undefined_msg = "ไม่มีตัวแปร n", incorrect_msg = "n มีค่าไม่ถูกต้อง เช่น กรณีอินพุตเป็น " + v[0]) Ex().has_equal_value(pre_code="___inp___[:] =" + str(v), name="a", undefined_msg = "ไม่มีตัวแปร a", incorrect_msg = "a มีค่าไม่ถูกต้อง เช่น กรณีอินพุตเป็น " + v[0])
ใช้ append ในการสร้างลิสต์
แบบฝึกหัด 5-2 ข้อที่ 2

มี a เป็นลิสต์เก็บสตริงให้แล้ว จงสร้างลิสต์ b มีขนาดเท่าลิสต์ a โดย b[i] เก็บค่าสตริงกลับลำดับของ a[i] เช่น a = ["python", "java"] จะได้ b = ["nohtyp", "avaj"]

a = ["a", "ab", "", "abcdef", "abc"] b = [] for i in range(len(a)): b.append(a[i][::-1]) Ex().check_object("b").has_equal_value(incorrect_msg = "ยังไม่ถูกต้อง")
แบบฝึกหัด 5-2 ข้อที่ 3

โปรแกรมข้างล่างนี้อ่านข้อมูลการจัดการลิสต์ x เก็บในตัวแปร c โดยมีลักษณะการทำงาน 4 แบบขึ้นกับค่าของ c ดังรูป จงเติมที่เขียน ??? ให้สมบูรณ์ (หมายเหตุ: สำหรับการลบ ข้อมูลที่ให้ลบมีอยู่ใน x แน่ ๆ ไม่ต้องกังวลว่าจะหาไม่พบ)

___inp___ = ["A a"] def input(): return ___inp___[0] x = ['a', 'bb', 'ccc', 'd', 'e'] c = input().split() if c[0] == "A": x.append(c[1]) # เขียนให้ดูเป็นตัวอย่าง elif c[0] == "I": ??? elif c[0] == "R": ??? elif c[0] == "P": ??? print(x) x = ['a', 'bb', 'ccc', 'd', 'e'] c = input().split() if c[0] == "A": x.append(c[1]) elif c[0] == "I": x.insert(int(c[1]), c[2]) elif c[0] == "R": x.remove(c[1]) elif c[0] == "P": x.pop(int(c[1])) print(x) t = "อย่าลิม index ต้องเป็นจำนวนเต็ม" cmds = ["I 4 Z", "A x", "R ccc", "P -1"] msgs = [t, "", "", t] for k in range(len(cmds)): Ex().has_equal_output(pre_code="___inp___[0] ='" + cmds[k] + "'", incorrect_msg = "ผิด เช่น กรณี c[0] เป็น" + cmds[k][0] + " " + msgs[k])
แบบฝึกหัด 5-2 ข้อที่ 4

ข้อนี้เหมือนข้อที่แล้ว แต่มีสิ่งต้องตรวจสอบเพิ่มเติมคือ ข้อมูลที่ต้องการลบอาจไม่มีอยู่ในลิสต์, index ที่ต้องการลบหรือเพิ่มข้อมูลอาจไม่ใช่ index ที่ถูกต้อง ในกรณีที่พบเหตุการณ์เช่นนี้ในแสดงข้อความว่า Invalid

___inp___ = ["A a"] def input(): return ___inp___[0] x = ['a', 'bb', 'ccc', 'd', 'e'] c = input().split() invalid = False if c[0] == "A": x.append(c[1]) # เขียนให้ดูเป็นตัวอย่าง elif c[0] == "I": ??? elif c[0] == "R": ??? elif c[0] == "P": ??? if not invalid: print(x) else: print("Invalid") x = ['a', 'bb', 'ccc', 'd', 'e'] c = input().split() invalid = False if c[0] == "A": x.append(c[1]) elif c[0] == "I": idx = int(c[1]) if -(len(x)+1) <= idx <= len(x): x.insert(idx, c[2]) else: invalid = True elif c[0] == "R": if c[1] in x: x.remove(c[1]) else: invalid = True elif c[0] == "P": idx = int(c[1]) if -len(x) <= idx < len(x): x.pop(idx) else: invalid = True if not invalid: print(x) else: print("Invalid") t1 = "insert ได้ตั้งแต่ -(len(x)+1) จนถึง len(x)" t2 = "pop ได้ตั้งแต่ -len(x) จนถึง len(x)-1" t3 = "remove ได้เฉพาะตัวที่มีอยู่ในลิสต์" cmds = ["I 5 Z", "I -6 Z", "I -7 Z", "I 6 Z", "P 4", "P -5", "P 5", "P -6", "R ccc", "R cc", "A x" ] msgs = [t1, t1, t1, t1, t2, t2, t2, t2, t3, t3, ""] for k in range(len(cmds)): Ex().has_equal_output(pre_code="___inp___[0] ='" + cmds[k] + "'", incorrect_msg = "ผิด: " + msgs[k])
แบบฝึกหัด 5-2 ข้อที่ 5

มีข้อมูลทาง input สามบรรทัด บรรทัดแรกเป็นรายการของรหัสสินค้า บรรทัดที่สองเป็นรายการของราคา (มีจำนวนข้อมูลเท่ากับของบรรทัดแรก โดยสินค้าชิ้นที่ตำแหน่ง i ก็มีราคาที่ตำแหน่ง i) บรรทัดสุดท้ายเป็นรหัสสินค้าที่อยากรู้ว่าราคาเท่าไร ถ้าเป็นรหัสที่ไม่มีอยู่ ให้แสดง Not found (หมายเหตุ: หัดใช้เมท็อดของลิสต์ที่เพิ่งเรียนมา)

___inp___ = ["A100 A200 A300 A400", "20.5 50.0 35.0 65.0", "A300"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t prod_ids = input().split() prices = input().split() qid = input() if qid in prod_ids: i = prod_ids.index(qid) print(prices[i]) else: print("Not found") for v in [["A100 A200 A300", "20.5 50.0 35.0", "A300"], ["A100 A200 A300", "20.5 50.0 35.0", "A999"]]: Ex().has_equal_output(pre_code="___inp___[:] =" + str(v), incorrect_msg = "ผิด เช่น กรณีอินพุตเป็น " + str(v))
ค้นรหัสสินค้าด้วยเมท็อด index จะง่ายกว่ามาก ไม่ต้องใช้วงวน
แบบฝึกหัด 5-2 ข้อที่ 6

โปรแกรมข้างล่างนี้มีลิสต์ d เก็บจำนวนเต็ม มีคำสั่งอ่านจำนวนเต็มเก็บใน q จงเขียนคำสั่งต่อเพื่อหาว่า q เป็นตัวที่น้อยสุดอันดับที่เท่าไรใน d (กำหนดให้ตัวที่น้อยสุด ๆ ใน d คือตัวน้อยสุดอันดับ 1) ถ้าใน d ไม่มี q ให้แสดง Not found

___inp___ = ["22"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t d = [98,2,7,54,38,21,0,8,22,45,62] q = int(input()) d = [98,2,7,54,38,21,0,8,22,45,62] q = int(input()) if q not in d: print("Not found") else: d.sort() k = d.index(q) print(k+1) for v in [0, 2, 21, 62, 98, 77, -9, 109]: Ex().has_equal_output(pre_code="___inp___[0] ='" + str(v) + "'", incorrect_msg = "ผิด: กรณี q =" + str(v))
เรียงลำดับข้อมูลใน d จากน้อยไปมาก แล้วก็ใช้เมท็อด index ค้น q ใน d