code ข้างล่างนี้มีคลาส Rational
เพื่อผลิตจำนวนตรรกยะ คือ จำนวนที่เขียนในรูปของ เศษ/ส่วน โดยที่เศษ (numerator) และส่วน (denominator) เป็นจำนวนเต็ม จงเขียนเมท็อด __str__
ที่คืนสตริงที่นำเศษกับส่วนมาประกอบกันโดยมีเครื่องหมาย / คั่น และอาจมีเครื่องหมายลบ - นำหน้า ถ้าเป็นจำนวนลบ (เช่น str(Rational(-2,-4)), str(Rational(2,-4)))
ได้ 2/4
กับ -2/4
ตามลำดับ)
___inp___ = ["7 9"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
class Rational:
def __init__(self, n, d):
self.n = n
self.d = d
def __str__(self):
#----------------------------------
# ไม่ต้องแก้ไขคำสั่งใด ๆ ข้างล่างนี้
n, d = [int(e) for e in input().split()]
r = Rational(n, d)
s = str(r)
class Rational:
def __init__(self, n, d):
self.n = n
self.d = d
def __str__(self):
s = str(abs(self.n)) + "/" + str(abs(self.d))
if self.n/self.d < 0: s = "-" + s
return s
n, d = [int(e) for e in input().split()]
r = Rational(n, d)
s = str(r)
vars = ["7 9", "-7 -9", "-7 9", "7 -9"]
msgs = ["เป็นบวกทั้งคู่", "เป็นลบทั้งคู่", "มีหนึ่งตัวติดลบ", "มีหนึ่งตัวติดลบ"]
for v,msg in zip(vars, msgs):
Ex().has_equal_value(pre_code = "___inp___[0] = '" + v + "'", name = "s",
undefined_msg = "ไม่พบสตริง s", incorrect_msg = "สตริง s มีค่าไม่ถูกต้อง กรณีเศษและส่วน" + msg)
code ข้างล่างนี้มีคลาส Rational
เพื่อผลิตจำนวนตรรกยะ คือ จำนวนที่เขียนในรูปของ เศษ/ส่วน โดยที่เศษ (numerator) และส่วน (denominator) เป็นจำนวนเต็ม จงเขียนเมท็อด __lt__(self, x)
ที่คืนผลการเปรียบเทียบว่า self น้อยกว่า x หรือไม่ (โดยใช้ค่าของจำนวนตรรกยะของทั้งสองในการเปรียบเทียบ)
___inp___ = ["None"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
def check_Rational():
r = [Rational(3, 2), Rational(2,7), Rational(-3, 4), Rational(3, -4)]
for i in range(len(r)):
for j in range(len(r)):
print(r[i] < r[j])
class Rational:
def __init__(self, n, d):
self.n = n
self.d = d
def __lt__(self, x):
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
class Rational:
def __init__(self, n, d):
self.n = n
self.d = d
def __lt__(self, x):
return self.n/self.d < x.n/x.d
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
Ex().has_equal_output(pre_code = "___inp___[0] = 'check_Rational()'", incorrect_msg = "ยังเปรียบเทียบใน __lt__ ไม่ถูกต้อง")
code ข้างล่างนี้มีคลาส Time
เพื่อผลิตอ็อบเจกต์เวลา ภายในเก็บเลขชั่วโมง นาที และวินาที จงเขียนเมท็อดเพิ่มในคลาสนี้ เพื่อให้คำสั่ง t.sort()
สามารถเรียงลำดับเวลาที่เก็บในลิสต์ t
ได้ถูกต้องจากเวลาน้อยไปมาก (เวลาน้อยกว่าคือเวลาที่มาก่อน)
___inp___ = ["None"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
def check_Time():
t = [Time(9,5,30), Time(10,0,0),
Time(9,5,29), Time(9,5,30),
Time(9,6,10), Time(1,2,3)]
t.sort()
for e in t: print(e)
class Time:
def __init__(self, h, m, s):
self.h = h
self.m = m
self.s = s
def __str__(self):
return ("0"+str(self.h))[-2:]+":" + \
("0"+str(self.m))[-2:]+":" + \
("0"+str(self.s))[-2:]
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
class Time:
def __init__(self, h, m, s):
self.h = h
self.m = m
self.s = s
def __str__(self):
return ("0"+str(self.h))[-2:]+":" + \
("0"+str(self.m))[-2:]+":" + \
("0"+str(self.s))[-2:]
def __lt__(self, rhs):
t1 = (self.h, self.m, self.s)
t2 = (rhs.h, rhs.m, rhs.s)
return t1 < t2
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
Ex().has_equal_output(pre_code = "___inp___[0] = 'check_Time()'", \
incorrect_msg = "ยังเปรียบเทียบเวลาใน __lt__ ไม่ถูกต้อง")
code ข้างล่างนี้มีคลาส Item
และ Order
เพื่อผลิตอ็อบเจกต์รายการอาหารและการสั่งอาหารจากลูกค้า ภายใน Order
มีตัวแปร order_items
เป็นลิสต์เก็บรายการอาหาร ซึ่งเป็นอ็อบเจกต์ของ Item
ที่ลูกค้าสั่ง เช่น ลูกค้าสั่งส้มตำสองจาน ก็จะมีอ็อบเจกต์ของส้มตำของอันในลิสต์นี้ นอกจากนี้มีตัวแปร paid
เก็บสถานะว่า การสั่งอาหารนี้จ่ายเงินแล้วหรือยัง
จงเขียนเมท็อดเพิ่มใน Order
เพื่อให้สามารถนำอ็อบเจกต์ไปเปรียบเทียบการสั่งอาหารได้ว่า การสั่งใดน้อยกว่าการสั่งใด โดยมีเกณฑ์การเปรียบเทียบดังนี้ การสั่งอาหารที่ยังไม่จ่ายถือว่าน้อยกว่าการสั่งอาหารที่จ่ายแล้ว (โดยไม่สนใจราคารวมของการสั่งอาหาร) หากสถานะการจ่ายอาหารเหมือนกัน ให้ใช้ราคารวมของรายอาหารทั้งหมดของการสั่งเป็นเกณฑ์การเปรียบเทียบ
___inp___ = ["None"]
def input():
t = ___inp___.pop(0)
___inp___.append(t)
return t
def check_Order():
m = [Item("A", 10), Item("B", 15), Item("C", 18), Item("D", 20)]
o1 = Order(); o2 = Order(); o3 = Order(); o4 = Order()
o1.order_items = [m[0],m[1],m[0],m[2]]
o2.order_items = o1.order_items
o3.order_items = [m[1],m[1],m[2],m[2],m[0],m[3]]
o4.order_items = o3.order_items
o2.paid = o4.paid = True
print(o1 < o2, o1 < o3, o1 < o4)
print(o2 < o1, o2 < o3, o2 < o4)
print(o3 < o1, o3 < o2, o3 < o4)
print(o4 < o1, o4 < o2, o4 < o3)
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
class Order:
def __init__(self):
self.order_items = []
self.paid = False
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
class Item:
def __init__(self, name, price):
self.name = name
self.price = price
class Order:
def __init__(self):
self.order_items = []
self.paid = False
def total(self):
return sum([item.price
for item in self.order_items])
def __lt__(self, x):
return (self.paid,self.total()) < (x.paid,x.total())
#----------------------------
exec(input()) # ไม่แก้ไขคำสั่งนี้
Ex().has_equal_output(pre_code = "___inp___[0] = 'check_Order()'", \
incorrect_msg = "ยังเปรียบเทียบไม่ถูกต้อง")