0

我的 python 代码中的条件有问题。这是一个数学应用程序,下面是不能正常运行的代码部分:

def askNumber():
    """Asks the number to test"""
    a=raw_input("Select the number to test (type 'exit' for leaving):")
    if len(a)!=0 and a.lower!="exit":
        try:
            b= int(a)
            processing(b)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            time.sleep(1)
            askNumber()
    elif len(a)!=0 and a.lower=="exit":
        answer()
    else:
        print "Your input can't be 'empty'"
        time.sleep(1)
        askNumber()

因此,当我在“a”的 raw_input 中键入“exit”时,假定的应用条件是elif条件,但最终应用if 条件,最终打印“您的输入无效。请输入“数字”! " 抱歉,如果很明显,我是初学者,尽管我多次尝试找出错误。

4

3 回答 3

7

您需要调用.lower()函数。

if len(a) != 0 and a.lower() != "exit":
    # ...
elif len(a) != 0 and a.lower() == "exit":

没有真正需要测试len(a)!=0,只需测试a自己:

if a and a.lower() != "exit":
    # ...
elif a and a.lower() == "exit":

空字符串False在布尔上下文中求值。

于 2013-03-21T11:53:05.213 回答
3

您的程序流程有点内向,我可以建议一些改进吗?

def askNumber():
    """Asks the number to test"""

    while True:
        a = raw_input("Select the number to test (type 'exit' for leaving):")

        if not a:
            print "Your input can't be 'empty'"
            continue

        if a.lower() == "exit":
            answer()
            break

        try:
            b = int(a)
        except ValueError:
            print "Your input is not valid. Please enter a 'number'!"
            continue

        processing(b)

实际上,not a也可以消除分支(空输入将在 中处理except)。

于 2013-03-21T11:58:57.017 回答
1

您可以更改以下条件:

   if a and a.lower() !="exit":
  # .....
   elif a and a.lower() == "exit":
      answer()
   elif a and not a.isdigit(): print "invalid input"
   else:
   #.............

请注意,你不需要len(a) != 0,只需使用a将评估它是否为空。

于 2013-03-21T12:51:42.183 回答