Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在while循环python中切换函数_Python - Fatal编程技术网

如何在while循环python中切换函数

如何在while循环python中切换函数,python,Python,我正在尝试制作一个程序,可以添加、删除和查看用户输入的菜肴。这看起来很简单,但是,我的while循环遇到了问题。当我键入add时,我可以将项目添加到列表中,但是,当我键入view时,addDish函数会继续循环。我想我用if语句修复了它,但是缺少了一些东西 dish_list = [] user_input = '' def addDish(dish_list): user_input = input("Please type the dish you want: ")

我正在尝试制作一个程序,可以添加、删除和查看用户输入的菜肴。这看起来很简单,但是,我的while循环遇到了问题。当我键入add时,我可以将项目添加到列表中,但是,当我键入view时,addDish函数会继续循环。我想我用if语句修复了它,但是缺少了一些东西

dish_list = []

user_input = ''

def addDish(dish_list):

    user_input = input("Please type the dish you want: ")

    dish_list.append(user_input)

#def deleteDish(dish_list):

def viewDish(dish_list):

    for i in range(len(dish_list)):

        print(dish_list[i])

user_input = input("Please enter a command: ")

while True:

    if user_input == '':

        user_input = input("Please enter a command: ")

    elif user_input == 'add':

        addDish(dish_list, user_input)

    elif user_input == 'view':

        viewDish(dish_list)

您不应该使用while循环,而应该调用一个函数,该函数在处理之前的输入后请求用户输入

dish_list = []

def addDish(dish_list):

    user_input = input("Please type the dish you want: ")

    dish_list.append(user_input)

#def deleteDish(dish_list):

def viewDish(dish_list):

    for i in range(len(dish_list)):

        print(dish_list[i])

def get_input(): 

    user_input = input("Please enter a command: ")

    if user_input == 'add':

        addDish(dish_list, user_input)

    elif user_input == 'view':

        viewDish(dish_list)

    getInput()

getInput()
稍微干净一点:

dish_list = []


def add_dish(dish_list):
    user_input = input("Please type the dish you want: ")
    dish_list.append(user_input)


def view_dish(dish_list):
    # for dish in dish_list:
    #     print(dish)
    print('\n'.join(dish_list))


while True:
    user_input = input("Please enter a command: ")

    if user_input == 'add':
        add_dish(dish_list)
    elif user_input == 'view':
        view_dish(dish_list)
    else:
        print("Unknown command %s" % user_input)

您的变量user_input永远不会设置回空,因此您永远无法输入新命令,因为它只将您输入的最后一个条目作为user_input,这将是addDish函数中读取的dish类型。此外,您对addDish的调用还有一个额外的参数。我还建议将所有内容都放到main方法中

def addDish(dish_list):

    user_input = input("Please type the dish you want: ")

    dish_list.append(user_input)


def viewDish(dish_list):

    for i in range(len(dish_list)):

    print(dish_list[i])


def main():

dish_list = []

while True:

    user_input = ''

    if user_input == '':

         user_input = input("Please enter a command: ")

    elif user_input == 'add':

         addDish(dish_list)

    elif user_input == 'view':

         viewDish(dish_list)


main()

以下是上述代码片段的固定版本:

def addDish(dish_list):
    user_input = raw_input("Please type the dish you want: ")
    dish_list.append(user_input)

#def deleteDish(dish_list):

def viewDish(dish_list):
    for dish in dish_list:
        print(dish)

dish_list = []

while True:
    user_input = raw_input("Please enter a command: ")
    if user_input == 'add':
        addDish(dish_list)
    elif user_input == 'view':
        viewDish(dish_list)
    elif user_input == 'exit':
        print('Over!')
        break
    else:
        print('Wrong entry. Retry...')
执行输出:

$python so.py
Please enter a command: add
Please type the dish you want: Bread
Please enter a command: add
Please type the dish you want: Burger
Please enter a command: view
Bread
Burger
Please enter a command: foo
Wrong entry. Retry...
Please enter a command: exit
Over!
$

只要您循环一次,
user\u input
就不再等于
'
,因此您的第一个条件将不会再次触发,而是会触发您在第一次迭代中设置的
user\u input
,您还需要正确调用
addDish
,删除
user\u input
参数。