5: List Processing

5-3: Reading Data into a List

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

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

อ่านข้อมูลจาก input ที่มีลักษณะดังตัวอย่างในรูป บรรทัดแรกบอกจำนวนข้อมูลและตามด้วยข้อมูลบรรทัดละจำนวน จากตัวอย่าง จงเขียนคำสั่งอ่านเข้ามาเก็บในลิสต์ชื่อ x มีค่าคือ [10.2, 23.1, 20.2, 19.1, 19.2]

___inp___ = ["10"] + [str(e/2) for e in range(10,20,1)] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t n = int(input()) x = [] for i in range(n): e = float(input()) x.append(e) Ex().check_object("x", missing_msg="ไม่มีตัวแปร x").\ has_equal_value(incorrect_msg = "x มีค่าไม่ตรงตามโจทย์")
อ่าน n แล้วใช้วงวน for หมุน n รอบ อ่านจำนวนจริง append เก็บในลิสต์
แบบฝึกหัด 5-3 ข้อที่ 2

อ่านข้อมูลจาก input ที่มีลักษณะดังตัวอย่างในรูป บรรทัดแรกบอกจำนวนข้อมูลและตามด้วยข้อมูลบรรทัดละจำนวน จากตัวอย่าง จงเขียนคำสั่งอ่านเข้ามาเก็บในลิสต์ชื่อ x มีค่าคือ [19.2, 19.1, 20.2, 23.1, 10.2]

___inp___ = ["10"] + [str(e/2) for e in range(10,20,1)] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t n = int(input()) x = [] for i in range(n): e = float(input()) x.insert(0,e) Ex().check_object("x", missing_msg="ไม่มีตัวแปร x").\ has_equal_value(incorrect_msg = "x มีค่าไม่ตรงตามโจทย์")
ใช้ insert ที่หน้าลิสต์ หรือจะใช้ append แล้วค่อย reverse ก็ได้
แบบฝึกหัด 5-3 ข้อที่ 3

อ่านข้อมูลจาก input ที่มีลักษณะดังตัวอย่างในรูป คือ มีข้อมูลบรรทัดละจำนวน โดยบรรทัดสุดท้ายเป็นคำว่า end จากตัวอย่าง จงเขียนคำสั่งอ่านเข้ามาเก็บในลิสต์ชื่อ x มีค่าคือ [10.2, 23.1, 20.2, 19.1, 19.2]

___inp___ = [str(e/2) for e in range(10,20,1)] + ["end"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t x = [] e = input() while e != "end": x.append(float(e)) e = input() Ex().check_object("x", missing_msg="ไม่มีตัวแปร x").\ has_equal_value(incorrect_msg = "x มีค่าไม่ตรงตามโจทย์")
ใช้ while อ่านเป็นสตริงมาตรวจกับ end ก่อน ถ้าไม่ใช่ถึงจะแปลงเป็น float แล้ว append ใส่ลิสต์ x
แบบฝึกหัด 5-3 ข้อที่ 4

อ่านข้อมูลจาก input ที่มีลักษณะดังตัวอย่างในรูป คือ มีข้อมูลบรรทัดละจำนวน โดยบรรทัดสุดท้ายเป็นคำว่า end จากตัวอย่าง จงเขียนคำสั่งอ่านเข้ามาเก็บในลิสต์ชื่อ x ให้มีค่าเป็น [10.2, 20.2, 19.2, 23.1, 19.1] คือให้นำข้อมูลตำแหน่งคู่ของอินพุตมานำหน้าข้อมูลตำแหน่งคี่

___inp___ = [str(e/2) for e in range(10,20,1)] + ["end"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t x = [] e = input() while e != "end": x.append(float(e)) e = input() x = x[::2] + x[1::2] Ex().check_object("x", missing_msg="ไม่มีตัวแปร x").\ has_equal_value(incorrect_msg = "x มีค่าไม่ตรงตามโจทย์")
อ่านเข้ามาเก็บตามลำดับแบบปกติก่อน แล้วค่อยมาเฉพาะคำแหน่งคู่มาต่อกับข้อมูลตำแหน่งคี่ ด้วยการบวกสอง slice
แบบฝึกหัด 5-3 ข้อที่ 5

อ่านข้อมูลจาก input ที่มีลักษณะเป็นจำนวนเต็มเรียงกันในบรรทัดเดียว คั่นด้วยช่องว่าง เช่น 20 10 30 10 จงเขียนคำสั่งอ่านเข้ามาเก็บในลิสต์ของจำนวนเต็มชื่อ x เช่นจากตัวอย่างจะได้ x = [20, 10, 30, 10]

___inp___ = ["10 20 30 20 40 10 23"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t x = [] d = input().split() for e in d: x.append(int(e)) Ex().check_object("x", missing_msg="ไม่มีตัวแปร x").\ has_equal_value(incorrect_msg = "x มีค่าไม่ตรงตามโจทย์")
split ข้อมูลที่รับจาก input ได้ลิสต์ของสตริง แล้วใช้ for e in ลิสต์ หยิบทีละตัวมาแปลงเป็น int เก็บใส่ x
แบบฝึกหัด 5-3 ข้อที่ 6

อ่านข้อมูลจาก input ที่มีลักษณะเป็นรายการของรหัสภาคฯ กับชื่อภาคฯ ในบรรทัดเดียวกัน คั่นด้วยช่องว่าง เช่น CE Civil ME Mechanical EE Electrical จงเขียนคำสั่งอ่านอินพุตมาสร้างเป็นสองลิสต์ คือ dept_codes กับ dept_names เช่น จากตัวอย่าง จะได้ dept_codes = ["CE", "ME", "EE"] และ dept_names = ["Civil", "Mechanical", "Electrical"]

___inp___ = ["CP Computer CE Civil ME Mechanical EE Electrical IE Industrial"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t x = input().split() dept_codes = x[::2] dept_names = x[1::2] Ex().check_object("dept_codes", missing_msg="ไม่มีตัวแปร dept_codes").\ has_equal_value(incorrect_msg = "dept_codes มีค่าไม่ตรงตามโจทย์") Ex().check_object("dept_names", missing_msg="ไม่มีตัวแปร dept_names").\ has_equal_value(incorrect_msg = "dept_names มีค่าไม่ตรงตามโจทย์")
อ่านมาเก็บในลิสต์เดียวก่อน แยกค่อยมา slice แยกตามที่ต้องการ