如何将对象添加到列表并使用 Class 打印对象?
How can I add object to a list and print the object using Class?
我正在尝试创建一个程序来使用 Class 和函数获取饮料类型和大小。收集饮料(柠檬水或苏打水)后,我想将所有值分配给一个对象并最终将该对象添加到列表中。最后,我想显示类似下面的控制台:
饮料计划
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:S
您想要什么尺码?输入 S、M 或 L:M
您想再调制一种饮品吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:L
您想要什么尺码?输入 S、M 或 L:L
加糖还是不加糖?输入 S 或 U:U
您想再调制一种饮品吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:L
您想要什么尺码?输入 S、M 或 L:S
加糖还是不加糖?输入 S 或 U:S
您想再调制一种饮料吗? y/n? 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()
在上面的代码中,我尝试使用追加将对象添加到列表中,但最终列表中只有一个元素。我不确定我的代码中是否遗漏了某些东西,所以饮料清单没有加起来。如能指出,将不胜感激。
下面是我得到的结果:
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:s
您想要什么尺码?输入 S、M 或 L s
您想再调制一种饮料吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:l
您想要什么尺码?输入 S、M 或 L l
加糖还是不加糖?输入 S 或 U:s
您想再调制一种饮料吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:l
您想要什么尺码?输入 S、M 或 L m
加糖还是不加糖?输入 S 或 U:s
您想再调制一种饮料吗? y/n? n
饮料 3:汽水
尺寸:中号价格:1.5 美元糖:加糖
您创建了 3 个饮料订单。感谢您使用本程序!
当您通过第一个问题时,您会发现其他问题,但是 drinks
只显示一种饮料的问题是由于这行代码造成的:
drinks=write_drink_list(drink,size,price,sugar)
您每次都用最新的饮料覆盖您的 drinks
清单,而不是将其附加到您的清单中。您追加 drinks
列表的位置在 write_drink_list
中,但这对您没有任何好处,因为它将它追加到其本地 drinks
列表,而不是 [=11] =] 列表在 main
中。 write_drink_list
中的 drinks
列表每次调用时都会重置,因此该函数中的 append
每次调用时基本上都会创建一个列表。
我正在尝试创建一个程序来使用 Class 和函数获取饮料类型和大小。收集饮料(柠檬水或苏打水)后,我想将所有值分配给一个对象并最终将该对象添加到列表中。最后,我想显示类似下面的控制台:
饮料计划
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:S
您想要什么尺码?输入 S、M 或 L:M
您想再调制一种饮品吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:L
您想要什么尺码?输入 S、M 或 L:L
加糖还是不加糖?输入 S 或 U:U
您想再调制一种饮品吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:L
您想要什么尺码?输入 S、M 或 L:S
加糖还是不加糖?输入 S 或 U:S
您想再调制一种饮料吗? y/n? 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()
在上面的代码中,我尝试使用追加将对象添加到列表中,但最终列表中只有一个元素。我不确定我的代码中是否遗漏了某些东西,所以饮料清单没有加起来。如能指出,将不胜感激。
下面是我得到的结果:
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:s
您想要什么尺码?输入 S、M 或 L s
您想再调制一种饮料吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:l
您想要什么尺码?输入 S、M 或 L l
加糖还是不加糖?输入 S 或 U:s
您想再调制一种饮料吗? y/n? y
汽水还是柠檬水?输入 S、L 或 0 表示无饮料:l
您想要什么尺码?输入 S、M 或 L m
加糖还是不加糖?输入 S 或 U:s
您想再调制一种饮料吗? y/n? n
饮料 3:汽水
尺寸:中号价格:1.5 美元糖:加糖
您创建了 3 个饮料订单。感谢您使用本程序!
当您通过第一个问题时,您会发现其他问题,但是 drinks
只显示一种饮料的问题是由于这行代码造成的:
drinks=write_drink_list(drink,size,price,sugar)
您每次都用最新的饮料覆盖您的 drinks
清单,而不是将其附加到您的清单中。您追加 drinks
列表的位置在 write_drink_list
中,但这对您没有任何好处,因为它将它追加到其本地 drinks
列表,而不是 [=11] =] 列表在 main
中。 write_drink_list
中的 drinks
列表每次调用时都会重置,因此该函数中的 append
每次调用时基本上都会创建一个列表。