单个函数调用的连续结果

时间:2014-09-22 04:42:09

标签: python function while-loop

我是Python的新手,也是一般的编程,所以我决定编写一些基本的代码来帮助我了解它的细节。我决定尝试创建一个数据库编辑器,并开发了以下代码:

name = [] 
rank = [] 
age = []
cmd = input("Please enter a command: ")

def recall(item):   #Prints all of the information for an individual when given his/her name
    if item in name:
        index = name.index(item)    #Finds the position of the given name
        print(name[index] + ", " + rank[index] + ", " + age[index])     #prints the element of every list with the position of the name used as input
else:
    print("Invalid input. Please enter a valid input.")

def operation(cmd):
    while cmd != "end":
        if cmd == "recall":
            print(name)
            item = input("Please enter an input: ")
            recall(item)
        elif cmd == "add":
            new_name = input("Please enter a new name: ")
            name.append(new_name)
            new_rank = input("Please enter a new rank: ")
            rank.append(new_rank)
            new_age = input("Please input new age: ")
            age.append(new_age)
            recall(new_name)
        else:
            print("Please input a valid command.")
    else:
        input("Press enter to quit.")

operation(cmd)

我希望能够调用operation(cmd),并且可以调用尽可能多的函数/执行任意数量的操作。不幸的是,它只是无限地打印其中一个结果而不是让我输入多个命令。

如何更改此功能以便我可以调用operation(cmd)一次,并重复调用其他功能?或者有更好的方法来做这件事吗?请记住,我是初学者,只是想学习,而不是开发人员。

4 个答案:

答案 0 :(得分:0)

您没有在代码中添加任何内容来显示operator_1,operator_2和operator_3的来源,尽管您已暗示operator_3来自命令行。

你需要有一些代码才能获得" operator_3"的下一个值。这可能来自function_3的参数列表,在这种情况下你会得到:

def function_3(operator_3):
    for loopvariable in operator_3:
       if loopvariable == some_value_1:
#(and so forth, then:)

function_3(["this","that","something","something else"])

或者,您可以从输入中获取它(默认情况下,键盘):

def function_3():
    read_from_keyboard=raw_input("First command:")
    while (read_from_keyboard != "end"):
       if read_from_keyboard == some_value_1:
 #(and so forth, then at the end of your while loop, read the next line)
       read_from_keyboard = raw_input("Next command:")

答案 1 :(得分:0)

问题是你只在operator_3中检查一次function_3,第二次向用户询问操作员,你没有存储它的值,这就是为什么它只运行一个条件

def function_3(operator_3):
    while operator_3 != "end":
        if operator_3 == some_value_1
            function_1(operator_1)
        elif operator_3 == some_value_2
            function_2
        else:
            print("Enter valid operator.")  # Here, the value of the input is lost

您尝试实施的逻辑如下:

  1. 要求用户提供一些意见。
  2. 使用此输入调用function_3
  3. 如果输入不是end,请运行function_1function_2
  4. 从第1步开始
  5. 但是,你错过了上面的#4,你试图再次重新启动循环。

    要解决此问题,请确保在向操作员提示时存储用户输入的值。为此,如果您使用的是Python3,请使用input函数;如果您使用的是Python2,请使用raw_input。这些函数会提示用户输入一些内容,然后将该输入返回给您的程序:

    def function_3(operator_3):
       while operator_3 != 'end':
          if operator_3 == some_value_1:
              function_1(operator_3)
          elif operator_3 == some_value_2:
              function_2(operator_3)
          else:
              operator_3 = input('Enter valid operator: ')
          operator_3 = input('Enter operator or "end" to quit: ')
    

答案 2 :(得分:0)

看起来你正在尝试从用户那里获得输入,但你从未在function_3 ...

中实现它
def function_3(from_user):
    while (from_user != "end"):
        from_user = raw_input("enter a command: ")
        if from_user == some_value_1:
        # etc...

答案 3 :(得分:0)

看看你的代码:

 while cmd != "end":
    if cmd == "recall":

如果您使用“结束”,“召回”或“添加”之外的任何内容致电operation,则while中的条件为True,下一个if也是True,但随后的if是假的。因此,该函数执行以下块

else:
    print("Please input a valid command.")

并且while循环继续到下一圈。由于cmd未发生变化,因此相同的过程会一再重复。