我的问题在#的范围之内。我不明白为什么invalidDish在一个if语句中被设置为False之后仍然是True
class dishes:
def __init__(self, serial_no, dish_name, price):
self.serial_no = serial_no
self.dish_name = dish_name
self.price = price
def show_menu(self):
print(str(self.serial_no) + '. ' + self.dish_name + '\t$' + self.price)
def errorMessage(code, range):
if code == 'outOfRange':
print('***Please enter number 1 - {} only***\n'.format(str(range)))
machineRunning()
plain_prata = dishes(1, 'Plain prata', '0.50')
egg_prata = dishes(2, 'Egg prata', '1.00')
cheese_prata = dishes(3, 'Cheese prata', '2.50')
garlic_prata = dishes(4, 'Garlic prata', '1.50')
ham_prata = dishes(5, 'Ham prata', '2.50')
menu = [plain_prata, egg_prata, cheese_prata, garlic_prata, ham_prata]
current_order = []
def machineRunning():
while True:
print('1. Menu')
print('2. Add order')
print('3. Checkout')
value = input('Please input:')
try:
value = int(value)
if value < 1 or value > 3:
errorMessage('outOfRange', 3)
except ValueError:
print('***Please enter number 1 - 3 only***\n')
continue
if value == 1:
print()
for x in range(len(menu)):
menu[x].show_menu()
elif value == 2:
dish = input('Dish name/number:')
try:
dish = int(dish) - 1
if dish < 0 or dish >= len(menu):
errorMessage('outOfRange', len(menu))
except ValueError:
loop = True
while(loop):
for x in range(len(menu)):
dish = dish.capitalize()
split_dish = dish.split()
if dish == menu[x].dish_name:
dish = int(x)
loop = False
break
else:
invalidDish = True
x = 0
############################################
while invalidDish and x < len(menu):
print (invalidDish)
print (x)
if split_dish[0] in menu[x].dish_name:
isDish = input('Are you ordering ' + menu[x].dish_name + '?')
print('isDish',isDish.lower())
if 'y' in isDish.lower(): #TurningPoint
print('Entered here')
invalidDish = False
print(invalidDish)
break
else: x += 1
else: x += 1
##########################################
if invalidDish:
print('***Invalid dish name***\n')
dish = input('Dish name/number:')
amount = input('Amount:')
current_order.append([menu[dish].dish_name, menu[dish].price, amount])
else:
print('***Please enter number 1 - 3 only***\n')
for x in current_order:
print (x)
machineRunning()
我试着按照终端中的代码进行操作,但仍然无法解决问题。这是终端的结果
1. Menu
2. Add order
3. Checkout
Please input:2
Dish name/number:c
True
0
True
1
True
2
Are you ordering Cheese prata?y
isDish y
Entered here
False #It is set to False at this point
True #Why it becomes True again at the beginning of the loop?
0
True
1
另外,我正在学习python,尝试为一家餐厅制作收银机,生成每周、每月总结、计算利润等。有什么建议可以让我下一步做的更方便用户吗?就像python与其他软件或代码对话一样,使界面易于使用
您正在中断while循环,然后使用外部for循环再次循环,该循环将invalidDish设置为True
相关问题 更多 >
编程相关推荐