8: Basic Dict

8-3: for k in a_dict

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

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

จงเขียนฟังก์ชัน get_countries(capital_city, s) รับ capital_city เป็นดิกเก็บข้อมูลในรูปแบบ {ชื่อประเทศ: ชื่อเมืองหลวง} และ s เป็นสตริง ฟังก์ชันนี้คืนลิสต์ของชื่อประเทศที่ขึ้นต้นด้วยค่าที่เก็บใน s โดยลิสต์ที่คืนเรียงชื่อประเทศจากน้อยไปมากตามพจนานุกรม

def get_countries(capital_city, s): def get_countries(capital_city, s): result = [] for country in capital_city: if country.find(s) == 0: result.append(country) result.sort() return result q = "`" fname = "get_countries" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว') cc = str({"A":"12", "B":"21", "AA1":"13", "AA2":"14", "AA3":"15", "AAA":"16", "BA":"17"}) msg = "ให้ผลผิด อ่านโจทย์อีกรอบ" func.check_call(fname + "("+cc+", 'AA')").has_equal_value(incorrect_msg=msg) func.check_call(fname + "("+cc+", 'B')").has_equal_value(incorrect_msg=msg)
"ABCD".find("AB") จะได้ 0 เพราะ "ABCD" ขึ้นต้นด้วย "AB"
แบบฝึกหัด 8-3 ข้อที่ 2

จงเขียนฟังก์ชัน get_courseIDs(number_of_students, k) รับดิก number_of_students ที่เก็บข้อมูลในรูปแบบ {รหัสวิชา: จำนวนนิสิตที่ลงทะเบียน} กับ k ที่เป็นจำนวนเต็ม ฟังก์ชันนี้คืนลิสต์ของรหัสวิชาต่าง ๆ ที่มีจำนวนผู้ลงทะเบียนเรียนตั้งแต่ k คนขึ้นไป โดยให้เรียงรหัสวิชาในลิสต์ที่คืนจากน้อยไปมาก

def get_courseIDs(number_of_students, k): def get_courseIDs(number_of_students, k): result = [] for cid in number_of_students: if number_of_students[cid] >= k: result.append(cid) result.sort() return result q = "`" fname = "get_courseIDs" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว') cc = str({"01":100, "02":99, "03":10, "04":200, "05":120, "06":22}) func.check_call(fname + "("+cc+", 100)").has_equal_value(incorrect_msg="ให้ผลผิด อ่านโจทย์อีกรอบ")
แบบฝึกหัด 8-3 ข้อที่ 3

จงเขียนฟังก์ชัน add_all(points, blacklist, extra) รับดิก points ที่เก็บข้อมูลในรูปแบบ {รหัสสมาชิก: จำนวนแต้มสะสม}, blacklist เป็นลิสต์เก็บรหัสสมาชิก กับ extra เป็นจำนวนแต้ม ฟังก์ชันนี้จะเพิ่มแต้มเป็นจำนวน extra ในดิก points ให้กับสมาชิกทุกรายที่มีรหัสไม่ปรากฏใน blacklist ฟังก์ชันนี้ไม่คืนอะไรเลย เพราะจะปรับข้อมูลใน points

def add_all(points, blacklist, extra): def add_all(points, blacklist, extra): for m in points: if m not in blacklist: points[m] += extra q = "`" fname = "add_all" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.check_args("points", missing_msg = "อย่าเปลี่ยนหัวฟังก์ชัน ต้องเป็น add\_all(points, blacklist, extra)") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สามตัว') func.check_body().check_not(has_code(r"points\s*\="), msg="ไม่ควรมีคำสั่ง points = เพื่อเปลี่ยนค่าใน points") func.check_call("add_all({},[],0)").has_equal_value(incorrect_msg="ฟังก์ชันนี้ต้องไม่คืนอะไรเลย") pt = {"01":10, "02":20, "03":30, "04":40} bl = ["02", "01"] ex = 5 func.check_body().set_context(pt, bl, ex).has_equal_value(name = "points", incorrect_msg = "ปรับแต้มใน points ไม่ถูกต้อง อ่านโจทย์อีกครั้ง")
ใช้วงวน for ลุยหยิบสมาชิกใน points เพื่อไปตรวจว่าต้องไม่อยู่ใน blacklist จึงจะเพิ่มแต้มให้