จงเขียนฟังก์ชัน print_all_keys(d)
ที่รับ d เป็นดิกในรูปแบบ {สตริง: จำนวนเต็ม}
ฟังก์ชันนี้ไม่คืนอะไร แต่จะแสดงค่าคีย์ทุกตัว บรรทัดละตัว เรียงจากน้อยไปมาก
def print_all_keys(d):
def print_all_keys(d):
print('\n'.join(sorted(d)))
q = "`"
fname = "print_all_keys"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้ไม่รับพารามิเตอร์')
for a in [{"D":23, "B":43, "C":2, "A":37}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_output(incorrect_msg = "แสดงผลผิด")
จงเขียนฟังก์ชัน print_all_values(d)
ที่รับ d เป็นดิกในรูปแบบ {สตริง: จำนวนเต็ม}
ฟังก์ชันนี้ไม่คืนอะไร แต่จะแสดง value ทุกตัวใน d บรรทัดละตัว เรียงจากน้อยไปมาก
def print_all_values(d):
def print_all_values(d):
for v in sorted(d.values()):
print(v)
q = "`"
fname = "print_all_values"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้ไม่รับพารามิเตอร์')
for a in [{"D":37, "B":43, "C":2, "A":37}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_output(incorrect_msg = "แสดงผลผิด")
จงเขียนฟังก์ชัน print_all_key_value_pairs(d)
ที่รับ d เป็นดิกในรูปแบบ {จำนวนเต็ม: จำนวนเต็ม}
ฟังก์ชันนี้ไม่คืนอะไร แต่จะแสดงคู่ key กับ value ทุกคู่ใน d บรรทัดละคู่ในรูปแบบ (key, value) เรียงคีย์จากน้อยไปมาก
def print_all_key_value_pairs(d):
def print_all_key_value_pairs(d):
for kv in sorted(d.items()):
print(kv)
q = "`"
fname = "print_all_key_value_pairs"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้ไม่รับพารามิเตอร์')
for a in [{120:37, 109:43, 200:2, 150:37}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_output(incorrect_msg = "แสดงผลผิด")
จงเขียนฟังก์ชัน reverse(d)
ที่รับ d เป็นดิกในรูปแบบ {ชื่อโปรแกรมเมอร์: ชื่อภาษาคอมพิวเตอร์ที่ถนัดที่สุดภาษาเดียว}
ฟังก์ชันนี้จะคืนดิกที่เก็บข้อมูลกลับกันกับข้อมูลจาก d คือจะคืนดิกในรูปแบบ {ชื่อภาษาคอมพิวเตอร์: เซตของชื่อโปรแกรมเมอรที่ถนัดภาษานี้ที่สุด}
เช่น reverse({"Kob":"Python", "Tom":"C", "Pear":"C"})
ได้ {"C":{"Tom","Pear"}, "Python":{"Kob"}}
def reverse(d):
def reverse(d):
r = {}
for k,v in d.items():
if v not in r:
r[v] = {k}
else:
r[v].add(k)
return r
q = "`"
fname = "reverse"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว')
for a in [{"A":"a", "B":"b", "C":"a", "D":"b"},
{"A":"a", "B":"a", "C":"a", "D":"d"}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน reverse(d)
ที่รับ d เป็นดิกในรูปแบบ {ชื่อโปรแกรมเมอร์: เซตของภาษาคอมพิวเตอร์ที่ถนัด}
ฟังก์ชันนี้จะคืนดิกที่เก็บข้อมูลกลับกันกับข้อมูลจาก d คือจะคืนดิกในรูปแบบ {ชื่อภาษาคอมพิวเตอร์: เซตของชื่อโปรแกรมเมอรที่ถนัด}
เช่น reverse({"Kob":{"C","Python"}, "Tom":{"C","Java"}, "Pear":{"C"}})
ได้ {"C":{"Kob","Tom","Pear"}, "Python":{"Kob"}, "Java":{"Tom"}}
def reverse(d):
def reverse(d):
r = {}
for k,v in d.items():
for e in v:
if e not in r:
r[e] = {k}
else:
r[e].add(k)
return r
q = "`"
fname = "reverse"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว')
for a in [{"A":{"a","b"}, "B":{"b","c"}, "C":{"c"}, "D":{"a","c"}},
{"A":{"a","b"}, "B":{"c"}, "C":{"z"}}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน to_set_of_tuples(d)
ที่รับ d เป็นดิกในรูปแบบ {ชื่อโปรแกรมเมอร์: เซตของภาษาคอมพิวเตอร์ที่ถนัด}
ฟังก์ชันนี้จะคืนเซตที่เก็บทูเปิล (ชื่อโปรแกรมเมอร์, ชื่อภาษาคอมพิวเตอร์ที่ถนัด) ที่แทนทุกคู่ที่มีในดิก d เช่น to_set_of_tuples({"Kob":{"C","Python"}, "Tom":{"C","Java"}, "Pear":{"C"}})
ได้ {("Kob,"C"), ("Kob,"Python"), ("Tom", "C"), ("Tom", "Java"), ("Pear", "C")}
def to_set_of_tuples(d):
def to_set_of_tuples(d):
result = set()
for k,v in d.items():
for e in v:
result.add((k,e))
return result
q = "`"
fname = "to_set_of_tuples"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว')
for a in [{"A":{"a","b","c"}, "B":{"b","c"}, "C":{"c"}},
{"A":{"a","b"}, "B":{"c"}, "C":{"z","x"}}]:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน average_point(point)
ที่รับ point
เป็นดิกในรูปแบบ {เลขประจำตัว: คะแนนรวม}
ฟังก์ชันนี้จะคืนคะแนนรวมเฉลี่ยของนักเรียนทุกคน (ให้เขียนคำสั่งในฟังก์ชันนี้โดยไม่ใช้วงวนใด ๆ)
def average_point(point):
def average_point(point):
return sum(point.values())/len(point)
q = "`"
fname = "average_point"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์หนึ่งตัว')
func.check_body().check_not(has_code(r"(for|while)"), msg="ไม่ใช้ for หรือ while นะ")
import random
d1 = {e:random.randint(10,20) for e in ['s102','s103','s123','s190']}
d2 = {e:random.randint(10,20) for e in 'abcdefghijklmnop'}
args = [d1, d2]
for a in args:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
จงเขียนฟังก์ชัน merge_exam(midterm, final)
ที่รับ midterm
และ final
ทั้งคู่ เป็นดิกในรูปแบบ {เลขประจำตัว: คะแนน}
ฟังก์ชันนี้จะคืนดิกใหม่ในรูปแบบเดียวกับที่รับมา แต่มีคีย์เป็นเลขประจำตัวของทั้งสองดิก ส่วนคะแนนก็ได้จากการรวมการสอบทั้งสอง ถ้ามีใครขาดสอบครั้งใดครั้งหนึ่ง ก็จะมีเฉพาะครั้งที่เข้าสอบ เช่น merge_exam({"s1":10, "s2":10}, {"s2":5, "s3":8})
จะได้ผลเป็น {"s1":10, "s2":15, "s3":8}
def merge_exam(midterm, final):
def merge_exam(midterm, final):
result = {}
for sid in set(midterm) | set(final):
result[sid] = 0
if sid in midterm:
result[sid] += midterm[sid]
if sid in final:
result[sid] += final[sid]
return result
q = "`"
fname = "merge_exam"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว')
import random
d1 = {e:random.randint(10,20) for e in 'abcde'}
d2 = {e:random.randint(10,20) for e in 'cdefg'}
d3 = {e:random.randint(10,20) for e in 'xy'}
args = [[d1,d2], [d2,d3]]
for m,f in args:
fcall = fname + "(" + str(m) + "," + str(f) + ")"
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")