Python跳回def直到有效输入

时间:2017-09-19 07:58:25

标签: python

我有一个脚本,首先给用户一个菜单,然后根据脚本运行的菜单选项。

def menu():
 descriptions = ('SetupFeeDescr', 'OveruseFeeDescr', 'RecurrFeeDescr', 'CancellationFeeDescr')
 planIds = input('Specify Plan Id. Multiple Ids seperated by comma: ')
 print('\n Which description would you like to update? \n')
 for i,j in enumerate(descriptions):
  print(i+1,"-",j)
 print("Q - Quit")
 user_input = input('Enter your selection: ')
 if user_input == '1':
    descr = descriptions[0]
 if user_input == '2':
    descr = descriptions[1]
 if user_input == '3':
    descr = descriptions[2]
 if user_input == '4':
    descr = descriptions[3]
 if user_input.lower() == 'q':
    return
 return(descr, planIds)

如何制作我的主要'永远循环直到' q'通过菜单给出?

if __name__ == '__main__':
 prefixes = get_prefix()
 descr, planIds = menu()
 data, old = get_plan_rates(planIds, prefixes, descr)
 replace_content(data, old, descr)

我不认为它是另一个线程的副本,因为我试图在一个定义上循环,并且脚本执行4个defs。

1 个答案:

答案 0 :(得分:0)

只需创建一个无限while True循环并询问用户输入内部。如果输入为"q",则调用break并结束循环。对于你的代码,它将是这样的:

while True:
    if user_input == '1':
        descr = descriptions[0]
    if user_input == '2':
        descr = descriptions[1]
    #....
    if user_input == 'q':
        break

注意:在每次迭代中,您都会覆盖descr变量的内容。如果要累积多个选项,则必须使用可容纳许多值的数据结构,如列表。这将是:

descr = []
while True:
    if user_input == '1':
        descr.append(descriptions[0])
    if user_input == '2':
        descr.append(descriptions[1])
    #....
    if user_input == 'q':
        break

然后将所有内容打包到menu()函数中,最后返回descr列表。

更新

如果您要反复调用menu()功能,直到用户输入' q',那么您可以这样做:

if __name__ == '__main__':
    while True:
        if main() == "stop":
            break

def main():
    prefixes = get_prefix()
    result = menu()
    if result is None:
        return "stop"
    descr, planIds = result
    data, old = get_plan_rates(planIds, prefixes, descr)
    replace_content(data, old, descr)

每次调用menu()时,都会返回一对值,或者,如果用户输入为" q",则返回None。然后你检测到这种情况并停止脚本。