【题目】实现自助点餐小程序,要求满足以下要求:
用户可以通过输入菜名和价格自定义菜单,并将定义的菜单显示出来。接下来,用户可通过输入菜单中菜品的名称进行点餐,,用户点餐完成后提交,显示出用户点餐后的账单,账单中要包含用户点的菜单(菜名和价格) 及最后的总价。
【分析】
这个题目主要是考察的是python基础知识的使用,包括if语句,循环语句,字典,用户输入等的使用,是python基础的一个比较综合的的使用,其中一个的难点就是如何规范化输出,使得输出的信息比较整齐。
【编程实现】
menus = {}
#自定义菜单,用字典存储,输入ok结束
while(True):
menu = input('please input menus(ex:name,price),finished with ok:')
if menu!='ok':
menu = menu.split(",")
menus[menu[0]] = int(menu[1])
elif menu.strip() == '':
print('please input the right menu!')
else:
break
width = 40 #设置显示列的宽度为20个字符
print('The menus is:')
print('='*width,'Menus','='*width) #字符乘以一个数字表示该字符重复几次
print('name'.center(width),'price'.center(width),sep='')
for key in menus.keys():#循环打印出菜单 控制输出的格式,对齐
print(' '*int(width/2-2),key.ljust(int(width/2+2),' '),str(menus.get(key)).center(width),sep='')
print('='*(width-2),'Menus end','='*(width-2)) #字符乘以一个数字表示该字符重复几次
#用户点餐,输入菜单上的菜名,输入ok停止
print('start to order:')
user_menu = {} #用户点的菜
while(True):
name = input('please input name,finished with ok:')
if name != 'ok':
if name in menus.keys():#菜单中有这个菜
user_menu[name] = user_menu.get(name,0)+1 #记录菜被点的次数,一个菜可点多个
else: #不在菜单中则提示
print('please input the right name in the Menus!')
else: #输入ok则点餐完成
break
#显示账单
print('your order is'.center(width*2))
print('name'.ljust(width),'price'.ljust(width),sep='')
print('='*(width*2)) #字符乘以一个数字表示该字符重复几次
total_price = 0
for key in user_menu.keys():#循环打印出菜单 控制输出的格式,对齐
amount = user_menu.get(key,1)
price = amount*menus.get(key)
total_price += price
print((key+'*'+str(amount)).ljust(width), str(price).ljust(width), sep='')
print('='*(width*2)) #字符乘以一个数字表示该字符重复几次
print('total'.ljust(width),str(total_price).ljust(width),sep='')
结果显示: