在Python中处理文本菜单

0 投票
3 回答
4554 浏览
提问于 2025-04-15 23:07

我正在尝试在Python中创建一个基于文本的菜单。

这是我的代码:

#!/usr/bin/env python

def testcaseOutput():

    print '1. Add. 2. Subtract. 3. Divide. 4. Multiply'

    try:
        answer = int(raw_input('Enter a value (1 - 4) >. ')) 
    except ValueError:
        print 'Invalid input. Enter a value between 1 -4 .'
        testcaseOutput()

    if answer in range(1, 5):
        return answer
    else:
        print 'Invalid input. Enter a value between 1 - 4.'
        testcaseOutput()

我的问题是:

当用户输入无效的内容,比如不是数字时,我希望这个函数能再次被调用。所以我用了递归的方法,但我觉得这样设计不好。我在

if answer in range(1, 5). 

中又用了这种方法。

有没有其他方法可以处理这个问题?我需要在输入无效时再次提示用户。

另外,有没有办法把两个条件结合起来:检查输入是否是数字,以及检查这个数字是否在范围(1,5)内?如你所见,我是分别检查这两个条件的。

3 个回答

1

把整个函数的内容放到一个 while True: 循环里(当然要去掉递归调用)。

2
def testcaseOutput():

    answer = None
    legal_answers = ['1','2','3','4']
    tried = False
    while answer not in legal_answers:
        print "%s1. Add. 2. Subtract. 3. Divide. 4. Multiply" % \ 
              "Invalid input. " if tried else ""
        answer = raw_input('Enter a value (1 - 4) >. ')
        tried = True

    return answer #int(answer) if you really do want integers

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

3

一种可能的改进方法是使用一个循环,这个循环会不断打印提示信息并读取用户输入,直到用户输入了可以接受的内容为止:

def testcaseOutput():
    while True:
       print '1. Add. 2. Subtract. 3. Divide. 4. Multiply'

       try:
           answer = int(raw_input('Enter a value (1 - 4) >. ')) 
       except ValueError:
           print 'Invalid input. Enter a value between 1 -4 .'
           continue

      if not answer in range(1, 5):
          print 'Invalid input. Enter a value between 1 - 4.'
          continue

      return answer

撰写回答