【问题标题】:How can I add object to a list and print the object using Class?如何将对象添加到列表并使用 Class 打印对象?
【发布时间】:2021-06-11 01:33:34
【问题描述】:

我正在尝试创建一个程序来使用类和函数获取饮料类型和大小。收集饮料(柠檬水或苏打水)后,我想将所有值分配给一个对象并最终将该对象添加到一个列表中。最后,我想显示如下控制台:

饮料计划

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:S

你想要什么尺寸的?输入 S、M 或 L:M

您想再来一杯吗?是/否?是的

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:L

你想要什么尺寸的?输入 S、M 或 L:L

加糖还是不加糖?输入 S 或 U:U

您想再来一杯吗?是/否?是的

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:L

你想要什么尺寸的?输入 S、M 或 L:S

加糖还是不加糖?输入 S 或 U:S

您想再来一杯吗?是/否? n

饮料 1:苏打水

尺寸:中等价格:1.75 美元

饮料 2:柠檬水

大小:大价格:2.00 美元糖:不加糖

饮料 3:柠檬水

尺寸:小价格:1.50 美元糖:加糖

您创建了 3 个饮料订单。感谢您使用本程序!

        print('The Beverage Program\n')

def closing(total):
        print('\nYou created', total,'drink orders. Thanks for using this program!')

class Beverage:
    def __init__(self,size,price):
        self.size = size
        self.price = price
        
    def display(self):
        print('Size:',self.size,"Price: $",self.price)
        
class Soda(Beverage):
    def __init__(self,size,price):
        Beverage.__init__(self,size,price)

    def display(self):    
        print('Size:',self.size,"Price: $",self.price)
        
class Lemonade(Soda):
    def __init__(self,size,price,sugar):
        Soda.__init__(self,size,price)
        self.sugar = sugar

    def display(self):    
        print('Size:',self.size,"Price: $",self.price,'Sugar: '+str(self.sugar))
def get_size(size_input):
        if size_input == 'l':size = 'Large'
        elif size_input == 'm':size = 'Medium'
        else: size = 'Small'
        return size

def get_price(size_input):
    if size_input == 'l': price=2.0
    elif size_input == 'm': price = 1.75
    else: price = 1.5
    return price

def get_sugar(drink):
    while drink == 'l':
        sugar = str.lower(input('Sweetened or Unsweetened?  Enter S or U:\t'))
        if sugar=='s':sugar_input = 'Sweetened'
        else:sugar_input = 'Unsweetened'
        return sugar_input

def get_drink_name(drink):
    for drink in drink:
        if drink == 's': drink_name='Soda'
        elif drink =='l': drink_name = "Lemonade"
        else: break
    return drink_name

def show_products(total,drinks):
        for drink in drinks:
            if isinstance(drink,Soda):
                    print('\nDrink',str(total)+': Soda')
            elif isinstance(drink,Lemonade):
                    print('\nDrink',str(total)+': Lemonade')
            drink.display()

def write_drink_list(drink,size,price,sugar):
    drinks=[]
    for drink in drink:
        if drink =='s':
            drinks.append(Soda(size,price))
        elif drink =='l':
            drinks.append(Lemonade(size,price,sugar))
    return drinks
                
def main():
    drinks=[]
    title()
    again = 'y'
    total = 0
    while again=='y':
        drink = str.lower(input('\nSoda or a lemonade? Enter S, L or 0 for no drinks:\t'))
        if drink == '0': exit()
        elif drink =='s' or drink =='l':           
            size_input = str.lower(input('What size would you like?  Enter S, M or L\t'))
            size = get_size(size_input)
            price = get_price(size)
            sugar = get_sugar(drink)
            drink_name = get_drink_name(drink)
            drinks=write_drink_list(drink,size,price,sugar)            
            if again == 'y':
                total += 1 
            again = input('Would you like to create another drink? y/n?\t')
        else:
            print("You made an error.")
            again = input('Would you like to create another pie? y or n?\t')

    show_products(total,drinks)
    closing(total)
    
if __name__ == "__main__":
        main()            

在上面的代码中,我尝试使用 append 将对象添加到列表中,但最终列表中只有一个元素。我不确定我的代码中是否有遗漏的东西,所以饮料清单不会加起来。如果您能指出来,将不胜感激。

下面是我得到的结果:

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:s

你想要什么尺寸的?输入 S、M 或 L s

您想再来一杯吗?是/否?是的

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:l

你想要什么尺寸的?输入 S、M 或 L l

加糖还是不加糖?输入 S 或 U:s

您想再来一杯吗?是/否?是的

苏打水还是柠檬水?输入 S、L 或 0 表示不喝酒:l

你想要什么尺寸的?输入 S、M 或 L m

加糖还是不加糖?输入 S 或 U:s

您想再来一杯吗?是/否? n

饮料 3:苏打水

大小:中等价格:1.5 美元糖:加糖

您创建了 3 个饮料订单。感谢您使用本程序!

【问题讨论】:

    标签: python-3.x for-loop if-statement append


    【解决方案1】:

    当您通过第一个问题时,您会发现其他问题,但 drinks 只显示一种饮料的问题是由于这行代码:

    drinks=write_drink_list(drink,size,price,sugar) 
    

    您每次都用最新的饮品覆盖您的drinks 列表,而不是将其附加到您的列表中。追加drinks 列表的位置在write_drink_list 中,但这对您没有任何好处,因为它将它追加到其本地drinks 列表中,而不是main 中的drinks 列表中。 write_drink_list 中的 drinks 列表在每次调用时都会重置,因此该函数中的 append 基本上是在每次调用时创建一个列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2019-09-13
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多