这段餐厅点餐小程序我看了好久主函数都没看懂,学习进度卡在这了,有没有大佬解析...
这段餐厅点餐小程序我看了好久主函数都没看懂,学习进度卡在这了,有没有大佬解析一下,class Meet:
nums = 0
class Egg(Meet):
name = "鸡蛋"
price = 1
class Beef(Meet):
name = "牛肉"
price = 25
class Mutoon(Meet):
name = "羊肉"
price = 30
class Vegetable:
nums = 0
class Onion(Vegetable):
name = "洋葱"
price = 2
class Tomato(Vegetable):
name = "番茄"
price = 2
class Potato(Vegetable):
name = "土豆"
price = 3
class Radish(Vegetable):
name = "萝卜"
price = 3
class Menu:
def order(self):
self.x = []
print("客官想要吃点什么?")
dishes = input("1.洋葱炒牛肉;2.洋葱炒羊肉;3.煎蛋;4.番茄炒蛋;5.土豆萝卜炖羊肉:")
dishes = dishes.split()
while dishes:
dish = dishes.pop(0)
if dish == '1':
onion = Onion()
onion.num = 1
beef = Beef()
beef.num = 1
self.x.extend()
if dish == '2':
onion = Onion()
onion.num = 1
mutoon = Mutoon()
mutoon.num = 1
self.x.extend()
if dish == '3':
egg = Egg()
egg.num = 2
self.x.append(egg)
if dish == '4':
tomato = Tomato()
tomato.num = 2
egg = Egg()
egg.num = 3
self.x.extend()
if dish == '5':
potato = Potato()
potato.num = 2
radish = Radish()
radish.num = 1
mutoon = Mutoon()
mutoon.num = 2
self.x.extend()
def pay(self):
total = 0
for each in self.x:
print(each.name, each.price, "*", each.num)
total += each.price * each.num
print(f"感谢惠顾,您一共消费了 {total} 元,欢迎下次光临~")
Menu()
这是一个餐厅点餐小程序,主要包含以下类:
1. Meet:肉类的父类,包含属性nums。
2. Egg、Beef、Mutoon:肉类子类,继承自Meet,分别表示鸡蛋、牛肉、羊肉,都包含属性name和price。
3. Vegetable:蔬菜的父类,包含属性nums。
4. Onion、Tomato、Potato、Radish:蔬菜子类,继承自Vegetable,分别表示洋葱、番茄、土豆、萝卜,都包含属性name和price。
5. Menu:菜单类,包含方法order和pay。
- order方法:要求用户输入要点的菜品,根据输入的数字判断需要点的菜品,然后生成相应的对象(包括肉类和蔬菜),并将对象加入到属性x中。
- pay方法:遍历属性x,计算总价,并输出每个菜品的名称、单价和数量,最后输出总价。
在代码的最后,调用了Menu的构造函数,也就是实例化了一个Menu对象,这样用户就可以通过该对象进行点餐和结账了。 这段代码是一个简单的餐厅点餐系统,首先定义了各种食材(Meat和Vegetable及其子类)以及菜单(Menu类),接着提供一个方法进行点餐(order方法)和计算支付金额(pay方法)。接下来,我简要解析下主要功能。
首先,定义了两个大类的食材,Meat(肉类)和Vegetable(蔬菜类)。Meat类下有三个子类:Egg(鸡蛋),Beef(牛肉),Mutoon(羊肉);Vegetable类下有四个子类:Onion(洋葱),Tomato(番茄),Potato(土豆),Radish(萝卜)。每个子类都有自己的名称和价格。
然后,定义了一个菜单(Menu)类,包含两个方法:
1、order方法:负责接收用户输入的菜品编号,然后根据菜品编号创建相应的食材对象,设置数量,并将这些食材对象存储在self.x列表中。
2、pay方法:负责遍历self.x列表,计算每种食材的总价,并输出总金额。
最后,代码中使用了Menu()创建了一个Menu类的实例,但没有调用任何方法。为了让程序正常运行,需要修改最后一行代码,将Menu()改为:
menu = Menu()
menu.order()
menu.pay()
这样,程序会创建一个Menu实例,调用order方法进行点餐,然后调用pay方法结算并输出总金额。 isdkz 发表于 2023-4-15 15:05
这段代码是一个简单的餐厅点餐系统,首先定义了各种食材(Meat和Vegetable及其子类)以及菜单(Menu类), ...
得出结论,chatgpt 不是一个吃货{:5_97:} 这段代码实现了一个简单的餐厅点餐小程序,其中定义了几个类来表示食材和菜单,以及一个 Menu 类来实现点餐和计算账单的功能。具体来说:
- Meet、Egg、Beef、Mutoon、Vegetable、Onion、Tomato、Potato 和 Radish 这几个类分别代表了各种食材,每个类中定义了食材的名称和价格。
- Menu 类中定义了 order 和 pay 两个方法,分别实现了点餐和计算账单的功能。
- 在 order 方法中,程序首先打印出提示信息,让用户输入想要点的菜。接着,根据用户输入的菜名,依次创建对应的食材对象,并将它们的数量设置为对应的值,最后将这些食材对象加入到一个列表 x 中。
- 在 pay 方法中,程序首先遍历列表 x 中的每个食材对象,将其名称、价格和数量打印出来,并累加总价。最后打印出总价。
总的来说,这段代码比较简单,主要是通过类和方法来实现了点餐和计算账单的功能。如果你不熟悉面向对象编程的基本概念和语法,建议先学习一下相关的知识。同时,如果你想深入理解这段代码,也可以试着将其复现一遍,并逐步调试和理解每一行代码的作用。
isdkz 发表于 2023-4-15 15:05
这段代码是一个简单的餐厅点餐系统,首先定义了各种食材(Meat和Vegetable及其子类)以及菜单(Menu类), ...
大佬,我看不懂为什么用onion.num不报错,不明白这个 “.”的原理和意义 2271040868 发表于 2023-4-15 22:30
大佬,我看不懂为什么用onion.num不报错,不明白这个 “.”的原理和意义
在Python中,.(点)操作符用于访问对象的属性和方法。在这个例子中,当你用onion.num这样的语法时,实际上是在访问onion这个实例对象的num属性。具体来说:
[*]当你创建一个Onion实例对象时,onion = Onion(),onion对象会继承Onion类以及其父类Vegetable的属性和方法。
[*]当你给onion对象的num属性赋值,如onion.num = 1,Python会在onion对象中创建一个名为num的属性,并将值1赋给它。如果onion对象没有num属性,Python会为它动态创建这个属性。
注意,在这个例子中,类似onion.num的属性并没有在Vegetable类或Onion类中定义。由于Python具有动态属性的特性,这样的代码不会报错。当你首次赋值给一个实例对象的属性时,Python会动态地为该实例对象创建这个属性。
不过,在实际编程中,我们通常会在类的__init__方法中明确地初始化实例属性,以使代码更清晰和可维护。在这个例子中,可以为Vegetable类和Meet类添加__init__方法,明确地初始化num属性:
class Meet:
def __init__(self):
self.num = 0
class Vegetable:
def __init__(self):
self.num = 0
这样,当创建子类实例时(如onion = Onion()),它们的num属性会被自动初始化为0,然后你可以根据需要修改它们的值。 isdkz 发表于 2023-4-15 22:35
在Python中,.(点)操作符用于访问对象的属性和方法。在这个例子中,当你用onion.num这样的语法时,实际 ...
感谢讲的这么细,太谢谢了
页:
[1]