未记录在while循环中的变量

2024-10-02 02:41:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题在#的范围之内。我不明白为什么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与其他软件或代码对话一样,使界面易于使用


Tags: nameselffalsetruenumberinputifvalue

热门问题