families,谁懂啊,看起来没问题的代码,但是为啥运行不出来,主要是测试的时候感觉有些代码块没运行,尤其是break和continue语句
```python
#点餐小程序
ordered_meanu=dict()#记录已经点过的菜品及数量
meanu={'地道雪花鱼':68,'宣威小炒肉':28,'滇西小炒鸡':46,'杨林酸菜鱼':68,'鸡汁豆腐花':22,'丽江紫洋芋':18,'白芸豆火腿':58,'菜包肉':15,'野生菌':53,'玉米汁':23,'米饭':10}
price=0#总计
#点菜
def order():
a=input('请选择进入点菜或加菜(按1)或者退出点菜界面(按2):')
while True:
if a==1:#进入点菜
key=input("请点菜:")
val=int(input('请选择份数:'))
if key not in ordered_meanu.keys():#初次点菜
if key not in meanu:
print('本店没有这个菜品,请看看其他菜')#对于客户输入错误提醒
else:
ordered_meanu[key]=val
else: #加菜
ordered_meanu[key]+=val
elif a==2: #退出点菜
break
return 0
#退菜
def cancel_order():
a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
while True:
if a==1: #进入退菜
key=input('客官您要退的菜品:')
val=int(input('要退几份:'))
if key not in ordered_meanu.keys():
print('客官您还没有点过此菜')
else: #退菜
ordered_meanu[key]-=val
if ordered_meanu[key]==0: #菜全退完从点单中除去
del ordered_meanu[key]
elif a==2: #结束退菜
break
a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
return 0
#查看已点菜单
def check():
print('客官以下是您点的菜以及总计:')
global price
for key in ordered_meanu.keys():
print(key+':'+string(ordered_meanu[key]))
price+=ordered_meanu[key]*meanu[key]#计算总和
print('共计'+':',price)
#后台厨师看到的餐桌以及菜单
def show(number):
num=number
print('桌号:',num)
for key in ordered_meanu.keys():
print(key+':'+string(ordered_meanu[key]))
return 0
stri='''------------------------------
【欢迎光临本店点餐小程序】
请选择您需要的服务:
1、点餐
2、退菜
3、查看菜单
4、退出
---------------------------
在此之前请选择您的座位号'''
print(stri)
num=input('请输入座位号:')
a=int(input('请输入选项:'))
while True:
if a==1:
order()
continue
elif a==2:
cancel_order()
continue
elif a==3:
check()
continue
elif a==4:
exit()
a=int(input('请输入选项:'))
show(num)
```
我重新调整了显示界面,把餐馆的菜品供应列表存入磁盘文本,启动“小程序”时计入内存生成 cuisine_dict ,重新设计了已点餐字典 ordered_dict ,以餐台号 table_num 为 key ,value 为 (cuisine, number) 元素的列表,只记录菜名和份数,单价从“供应菜品”字典 cuisine_dict 读取。循环点餐,只输入菜名序号,一份直接回车。大大方便点餐了输入。
餐馆供应菜品列表文本文件
读取代码
# 全局变量
mypath = r'/sdcard/Documents/'
ordered_dict = dict() # 记录已经点过的菜品及数量字典初值——空字典。
cuisine_dict = {i[0]: int(i[1]) for i in (i.split('\\') for i in open(f"{mypath}cuisine_list.txt").read().split('\n')[1:])} # 解析式生成供应菜品字典。(从磁盘文本读取菜品供应列表,格式为生成器——解析式用小括号包裹。)
#input(cuisine_dict) # 调试用语句。
clear = '\033[2J' # 清屏字符串。
error_tip = f"\n{' 输入错误!':^45}\n" # 输入错误提示信息字符串。
0、 input() 获取的是字符段,而您 if 条件判断却用的是整型 if a == 1 。这是导致您的菜单选择不起作用的直接原因。
1、退出模块函数,用 return ,break 是退出循环。
2、Python 默认4个英文空格缩进,您有8个,缩进太深。
3、点餐时没有菜品清单列印,怎么选?
4、餐馆餐台,得给设定个范围吧
5、最好把主程序也设计成模块,看着更好
我明天抽时间给您调试一下……
我给加了个菜品列表显示。要是把点菜设计成只输入菜名列表序号,点餐更方便。餐台号,得给定范围才好。
#!/sur/bin/nve python
# coding: utf-8
'''
点餐小程序
'''
ordered_meanu = dict() # 记录已经点过的菜品及数量
meanu = {'地道雪花鱼':68,'宣威小炒肉':28,'滇西小炒鸡':46,'杨林酸菜鱼':68,'鸡汁豆腐花':22,'丽江紫洋芋':18,'白芸豆火腿':58,'菜包肉':15,'野生菌':53,'玉米汁':23,'米饭':10}
def show_meanu(meanu):
''' 菜单列印 '''
print(f"\n{' 本店特供菜品 ':~^44}\n")
for key, value in meanu.items():
print(f"{'¥':>12}{value:.2f} {'_'*6} {key}")
print(f"\n{'~'*50}\n")
def order():
''' 点菜 '''
a = input(f"{'1、点菜或加菜 2、退出点菜界面':^37}\n{'~'*50}\n{'请选择:':>18}")
while True:
show_meanu(meanu)
if a=='1':#进入点菜
key=input("请点菜:")
if not key:
if not ordered_meanu:
print(f"\n{' 您还没有点菜呢!':^42}")
else:
break # 退出点菜循环。
val=int(input('请选择份数:'))
if key not in meanu:
print('本店没有这个菜品,请看看其他菜')#对于客户输入错误提醒
else: #加菜
ordered_meanu[key] = ordered_meanu.get(key, 0) + val # 新点或加菜数量累加,get(key) 值为 None 时,令其为 0 ,换句话说就是 key 不在字典中,加入 key 并令其值为 0 。
elif a=='2': #退出点菜
check()
return # 退出此模块不可以用 break,这是退出循环。
else:
print(f"\n{' 选择错误!':^45}")
return
# return 0 # python 函数可以不写返回语句,默认返回 None。
def cancel_order():
''' 退菜 '''
while True:
check()
a=int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
if a==1: #进入退菜
key=input('客官您要退的菜品:')
val=int(input('要退几份:'))
if key not in ordered_meanu.keys():
print('客官您还没有点过此菜')
else: #退菜
ordered_meanu[key]-=val
if ordered_meanu[key]==0: #菜全退完从点单中除去
del ordered_meanu[key]
elif a==2: #结束退菜
return
else:
print(f"\n{' 选择错误!':^45}")
#return 0 # 对于 Python 函数无需返回值时,此句可以不写,函数默认返回空值 None 。
def check():
''' 查看已点菜单 '''
price=0 # 总计初值。
print('\n客官以下是您点的菜以及总计:')
for key in ordered_meanu.keys():
#print(key+':'+string(ordered_meanu[key])) # 转字符型函数是 str 。
print(key+':'+str(ordered_meanu[key])) # 转字符型函数是 str 。
price+=ordered_meanu[key]*meanu[key]#计算总和
print('共计'+':',price)
def show(number):
''' 后台厨师看到的餐桌以及菜单 '''
num=number
print('桌号:',num)
for key in ordered_meanu.keys():
print(key+':'+string(ordered_meanu[key]))
return 0
'''if __name__ == '__main__':
show_meanu(meanu)
order()
input(55555) # 程序暂停。'''
stri='''------------------------------
【欢迎光临本店点餐小程序】
请选择您需要的服务:
1、点餐
2、退菜
3、查看菜单
4、退出
---------------------------
在此之前请选择您的座位号''
num=input('\n请输入座位号:')
while True:
print(stri)
a = input('请输入选项:')
if a=='1':
order()
elif a=='2':
cancel_order()
elif a=='3':
check()
elif a=='4':
exit()
else:
print(f"\n{' 选择错误!':^45}")
show(num)
转字符串是str方法,而不是你写的string.
其次 a =input('请选择进入点菜或加菜(按1)或者退出点菜界面(按2):')这里得到的是一个字符串,要转为int 且要放在while循环中
把continue删除掉才可以继续输入。
最终代码:
# 点餐小程序
ordered_meanu = dict() # 记录已经点过的菜品及数量
meanu = {'地道雪花鱼': 68, '宣威小炒肉': 28, '滇西小炒鸡': 46, '杨林酸菜鱼': 68, '鸡汁豆腐花': 22, '丽江紫洋芋': 18, '白芸豆火腿': 58, '菜包肉': 15,
'野生菌': 53, '玉米汁': 23, '米饭': 10}
price = 0 # 总计
# 点菜
def order():
while True:
a = int(input('请选择进入点菜或加菜(按1)或者退出点菜界面(按2):'))
if a == 1: # 进入点菜
key = input("请点菜:")
val = int(input('请选择份数:'))
if key not in ordered_meanu.keys(): # 初次点菜
if key not in meanu:
print('本店没有这个菜品,请看看其他菜') # 对于客户输入错误提醒
else:
ordered_meanu[key] = val
else: # 加菜
ordered_meanu[key] += val
elif a == 2: # 退出点菜
print('点菜结束!')
break
return 0
# 退菜
def cancel_order():
a = int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
while True:
if a == 1: # 进入退菜
key = input('客官您要退的菜品:')
val = int(input('要退几份:'))
if key not in ordered_meanu.keys():
print('客官您还没有点过此菜')
else: # 退菜
ordered_meanu[key] -= val
if ordered_meanu[key] == 0: # 菜全退完从点单中除去
del ordered_meanu[key]
elif a == 2: # 结束退菜
break
a = int(input('请选择退菜(按1)或者退出退菜界面(按2):'))
return 0
# 查看已点菜单
def check():
print('客官以下是您点的菜以及总计:')
global price
for key in ordered_meanu.keys():
print(key + ':' + str(ordered_meanu[key]))
price += ordered_meanu[key] * meanu[key] # 计算总和
print('共计' + ':', price)
# 后台厨师看到的餐桌以及菜单
def show(number):
num = number
print('桌号:', num)
for key in ordered_meanu.keys():
print(key + ':' + str(ordered_meanu[key]))
return 0
stri = '''------------------------------
【欢迎光临本店点餐小程序】
请选择您需要的服务:
1、点餐
2、退菜
3、查看菜单
4、退出
---------------------------
'''
print(stri)
print('在此之前请选择您的座位号')
num = input('请输入座位号:')
a = int(input('请输入选项:'))
while True:
if a == 1:
order()
elif a == 2:
cancel_order()
elif a == 3:
check()
elif a == 4:
exit()
print(stri)
a = int(input('请输入选项:'))
show(num)