繁体   English   中英

Python输入提示返回

[英]Python Input Prompt Go Back

我有一个包含多个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)

我想到的第一种方法是将对每个输入的操作分开到一个函数中。 这样,您可以构建这些功能的列表并逐一进行。 这意味着,如果用户输入撤消输入,则可以退后一步并转到上一个功能。

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.")

在剩下要执行的功能(进度小于功能数量)的同时,继续运行循环,并继续调用每个功能。 除了 ,如果使用undo命令,进度会下降1,然后使用以前的功能再次运行循环。

看起来您以错误的方式编码,原始输入不能成为您的重点……也许您应该创建唯一的原始输入并将输入保留在数组中

好的....现在你发布一个代码示例我明白了...我的建议:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM