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