Python输入提示返回

时间:2016-06-15 16:38:26

标签: python python-2.7

我有一个包含多个raw_input语句的脚本。我想添加输入'undo'的功能,并允许用户返回并重新输入最后一个raw_input值。如果没有goto类型语句,我该怎么做呢?

import sys

prompt_a = raw_input('Please enter x for x \nPlease enter y for y \nPlease enter c to cancel: ') or 'x'
prompt_a = prompt_a.lower()

if prompt_a == 'c':
    sys.exit()


prompt_b = raw_input('Please enter x for x \nPlease enter y for y \nPlease enter c to cancel \nPlease enter u to go back to previous question: ') or 'x'

if prompt_b == 'c':
    sys.exit()

#I would like to GOTO prompt a if the user entered u in the last prompt    

prompt_c = raw_input('Please enter x for x \nPlease enter y for y \nPlease enter c to cancel \nPlease enter u to go back to previous question: ') or 'x'

if prompt_c == 'c':
    sys.exit()

#I would like to GOTO prompt b if the user entered u in the last prompt   

更新

def function1(user_input):
    var_a = user_input.lower()
def function2(user_input):
    var_b = user_input.lower()
def function3(user_input):
    var_c = user_input.lower()

processing_functions = [function1, function2, function3]
progress = 0

while progress < len(processing_functions):
    user_input = raw_input("Enter input please: ")
    if user_input == "UNDO":
        progress -= 1
        print("Returning to previous input.")
    else:
        print("Processing " + user_input)
        progress += 1
        if progress == 1:
            function1(user_input)
        elif progress == 2:
            function2(user_input)
        elif progress == 3:
            function3(user_input)



print("Processing complete.")
print(var_a)
print(var_b)
print(var_c)

2 个答案:

答案 0 :(得分:2)

首先想到的是将每个输入的内容分成一个函数。通过这种方式,您可以逐个构建这些函数的列表并逐步完成。这意味着如果用户输入撤消输入,您可以退后一步并转到上一个功能。

def function1(user_input):
    # do something
def function2(user_input):
    # do something
def function3(user_input):
    # do something

processing_functions = [function1, function2, function3]
progress = 0

以上是设置。每个功能都可以接受用户的输入,并用它做任何需要的事情。如果您不熟悉,列表也会引用函数。您只需访问索引然后使用括号,即可从列表中调用函数,例如。 processing_functions[0](user_input)

现在我们来看看我们如何进行实际循环:

while progress < len(processing_functions):
    user_input = raw_input("Enter input please.")
    if user_input == "UNDO":
        progress -= 1
        print("Returning to previous input.")
    else:
        print("Processing " + user_input)
        processing_functions[progress](user_input)
        progress += 1

print("Processing complete.")

当你还有剩下的功能(进度小于函数数量)时,你继续运行循环,并继续调用每个函数。 外,如果使用撤消命令,则进度被丢弃一次,然后再次运行循环,现在使用上一个函数。

答案 1 :(得分:-2)

看起来你用错误的方式编码,输入raw不能成为你的观点......也许你应该创建一个独特的原始输入并将条目保存到数组中

好的....现在你发布一个代码示例我得到了它...我的建议:

import sys

def do(prompt, step):
    if 'u' in prompt:
        step = step-1
    else:
        step = step+1

    if step>1:
        print('Please enter x for x \nPlease enter y for y \nPlease enter c to cancel \nPlease enter u to go back to previous question: ')
    else:
        print('Please enter x for x \nPlease enter y for y \nPlease enter c to cancel: ')
    return step

step = 0
prompt = ""
while prompt != 'c':
    step = do(prompt, step)
    prompt = raw_input().lower()