求解一道Python习题

定义一个科技馆门票类 Ticket 。要求:初始化过程中根据要有姓名、年龄、星期数(1-7的整数,1-5表示周内,6、7表示周末)以及票价,根据年龄及周内/周末计算票价,票价规定如下:
a )、18岁以上成人周内票价为60元,周末票价均为平日的120%; b )、18岁以下票价为成人票价的一半,周末票价均为平日的110%;定义 show 方法,用于输出姓名、年龄和相应的票价。

创建 Ticket 对象t1,给定姓名、年龄及星期数(1-7的整数),调用 show 方法,输出实例对象的姓名、年龄和相应的票价。


class Ticket:
    def __init__(self, name, age, day, price):
        self.name = name
        self.age = age
        self.day = day
        self.price = price

    def show(self):
        if self.age >= 18:
            if self.day in [6, 7]:
                self.price *= 1.2
            return f"姓名:{self.name},年龄:{self.age},票价:{self.price}元"
        else:
            if self.day in [6, 7]:
                self.price *= 1.1
            else:
                self.price *= 0.5
            return f"姓名:{self.name},年龄:{self.age},票价:{self.price}元"


t1 = Ticket("Tom", 20, 3, 60)
print(t1.show())

def show(names,ages,weeks,n):
    prices=[]
    #计算价格
    for i in range(n):
        if ages[i]>=18:
            if weeks[i]>=1 and weeks[i]<=5:
                prices.append(60)
            else:
                prices.append(60*1.2)
        else:
            if weeks[i]>=1 and weeks[i]<=5:
                prices.append(60/2)
            else:
                prices.append((60/2)*1.1)
    #输出结果
    print("姓名    年龄    票价")
    for i in range(n):
        print("{}    {}岁    {}元".format(names[i],ages[i],prices[i]))

N=int(input("人数:"))
names=[]
ages=[]
weeks=[]
print("请输入信息:")
for i in range(N):
    q=input("")
    p=[i for i in q.split()]
    names.append(p[0])
    ages.append(int(p[1]))
    weeks.append(int(p[2]))
show(names,ages,weeks,N)

img