สร้าง tuple ชื่อ vowels ภายในเก็บตัวอักษรอังกฤษตัวเล็กที่เป็นสระเรียงตามพจนานุกรม
vowels = ("a", "e", "i", "o", "u")
obj = Ex().check_object('vowels', missing_msg = "ไม่มีตัวแปร vowels")
obj.has_equal_value(incorrect_msg = "vowels มีค่าไม่ตรงตามโจทย์")
obj.has_equal_value(expr_code="type(vowels)", incorrect_msg="vowels ต้องเป็น tuple")
อินพุตมีหลายบรรทัด (จบด้วย end) แต่ละบรรทัดมีข้อมูลชื่อรุ่นโทรศัพท์ ปีที่จำหน่าย และขนาดจอภาพ (ดังตัวอย่างในรูป) จงเขียนโปรแกรมอ่านอินพุตนี้มาสร้างเป็นลิสต์ของทูเปิลชื่อ phones แต่ละทูเปิลเก็บข้อมูลทั้งสามของโทรศัพท์ โดยเป็นลิสต์ที่เก็บข้อมูลของโทรศัพท์เรียงตามลำดับที่อ่านเข้ามา (จากอินพุตในรูป อ่านแล้วจะได้ phones = [('Nokia 9', 2019, 5.99), ('Nodia 3310', 2000, 1.5), ('Nokia N95', 2007, 2.6), ('iPhome 4', 2010, 3.5)]
___inp___ = [
"Nokia 9, 2019, 5.99",
"iPhome 4, 2010, 3.5",
"Nodia 3310, 2000, 1.5",
"Nokia N95, 2007, 2.6",
"end"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
phones = []
phones = []
x = input().strip()
while x != "end":
model, year, scr_size = x.split(", ")
year = int(year)
scr_size = float(scr_size)
phones.append( (model, year, scr_size) )
x = input().strip()
obj = Ex().check_object('phones', missing_msg = "ไม่มีตัวแปร phones")
obj.has_equal_value(expr_code="type(phones)", incorrect_msg="phones ต้องเป็นลิสต์")
obj.has_equal_value(expr_code="[type(e) for e in phones]", incorrect_msg="ภายใน phones ต้องเป็นทูเปิล")
obj.has_equal_value(expr_code="[type(e) for e in phones[0]]", incorrect_msg="ประเภทของข้อมูลภายในทูเปิลต้องเป็น (str, int, float)")
obj.has_equal_value(incorrect_msg = "phones มีค่าไม่ตรงตามโจทย์")
อินพุตของโจทย์ข้อนี้มีหลายบรรทัด (บรรทัดสุดท้ายเป็น end) แต่ละบรรทัดประกอบด้วยชื่อสี และจำนวนเต็มสามจำนวนที่แทนระดับของแม่สีแดง เขียว และฟ้าที่ประกอบกันเป็นสีตามชื่อ (ดูรูปประกอบ) จงเขียนโปรแกรมที่อ่านอินพุตมาสร้างดิกชื่อว่า color
ในรูปแบบ { (แดง, เขียว, ฟ้า): ชื่อสี }
(หมายเหตุ: เราสามารถสร้างดิกที่ใช้ทูเปิลเป็นคีย์ได้ แต่ใช้ลิสต์เป็นคีย์ไม่ได้)
___inp___ = [
"Margenta, 255, 0, 255",
"Gray, 128, 128, 128",
"Teal, 0, 128, 128",
"Maroon, 128, 0, 0",
"Navy, 0, 0, 128",
"Indian red, 205, 92, 92",
"Dark olive green, 85, 107, 47",
"end"
]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
color = {}
color = {}
x = input().split(", ")
while len(x) > 1:
cname = x[0]
r = int(x[1])
g = int(x[2])
b = int(x[3])
color[(r,g,b)] = cname
x = input().split(", ")
obj = Ex().check_object('color', missing_msg = "ไม่มีตัวแปร phones")
obj.has_equal_value(expr_code="type(color)", incorrect_msg="phones ต้องเป็น color")
obj.has_equal_value(expr_code="[type(k) for k in sorted(color)]", incorrect_msg="คีย์ของ color ต้องเป็นทูเปิล")
obj.has_equal_value(expr_code="[type(v) for k in sorted(color) for v in k ]", incorrect_msg="คีย์ของ color ต้องเป็นทูเปิลของจำนวนเต็ม")
obj.has_equal_value(incorrect_msg = "color มีค่าไม่ตรงตามโจทย์")
จงเขียนฟังก์ชัน top3_players(point):
ที่รับดิก point
ในรูปแบบ { player name: player point } ฟังก์ชันนี้คืนรายการของทูเปิลที่เก็บชื่อผู้เล่นกับคะแนน มีลำดับตามคะแนนจากมากไปน้อย 3 อันดับแรก เช่น top3_players({"Sung Hyun":8.60, "Jin-Young":9.30, "Ariya":6.16, "Minjee":6.33, "Lexi":6.71})
ได้ [("Jin-Young",9.30), ("Sung Hyun",8.6), ("Lexi",6.71)]
เป็นผลลัพธ์
def top3_players(point):
def top3_players(point):
temp = [(point[player], player) for player in point]
temp.sort()
return [(player,pt) for pt,player in temp][-1:-4:-1]
def is_list_of_tuple(x1, x2):
return all(type(e) is tuple for e in x1)
q = "`"
fname = "top3_players"
func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q))
func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว')
func.check_body().multi(
has_code(r".*\[\s*.*\s*.*for\s*.*\s*.*\].*", not_typed_msg = "ฝึกใช้ list comprehension นะ"),
#check_not(
# has_code(r"for(?![^\[]*\])"),
# has_code(r"while(?![^\[]*\])"),
# msg = "ไม่ใช้วงวน for หรือ while"
#)
)
args = [{'A':10, 'B':34, 'C':21, 'D':29, 'E':9}, {'A':50, 'B':14, 'C':1, 'D':9, 'E':99}]
for a in args:
fcall = fname + "(" + str(a) + ")"
func.check_call(fcall).has_equal_value(
func=is_list_of_tuple, incorrect_msg="ต้องคืน list of tuples")
func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")