Python if语句问题

时间:2014-09-23 16:26:37

标签: python validation if-statement

我是Python的新手,在下面的函数中,我正在尝试进行一些验证过程。

def countUpToTen(counter):
    if type(counter) is not int or counter == None:
        print("Invalid parameter!")
    if counter > 10:
        print("Counter can not be greater than 10!")
        return False
    else:
        count = 1
        while (count <= counter):
           print 'The count is:', count
           count = count + 1
        print("Done counting !")

countUpToTen("0s")

但是,当我将其称为countUpToTen("0s")时,它会打印Invalid parameter!Counter can not be greater than 10!,但我希望只有Invalid parameter!。我不知道它如何将字符串与第二个if语句中的数字进行比较。任何帮助都会得到满足。

2 个答案:

答案 0 :(得分:2)

打印第一条错误消息后,您没有退出该功能。

在Python 2中,你仍然可以比较字符串和整数,数字总是低于而不是其他任何东西(None除外),所以第二个if语句也匹配:

>>> '0s' > 10
True

Python 3不再支持任意类型之间的比较,而intstr的比较则会引发异常。

在这种情况下,当参数无效时,您应该使用return提前退出函数:

if type(counter) is not int or counter == None:
    print("Invalid parameter!")
    return

请注意,测试类型的Pythonic方法是使用isinstance()。您应该使用None身份测试来测试is,因为None是一个单例对象,但此处的测试是多余的;如果counterNone,则它不是int 的实例。以下就足够了:

if not isinstance(counter, int):
    print("Invalid parameter!")
    return

不要提前返回,而是考虑使用elif进行下一次测试:

if not isinstance(counter, int):
    print("Invalid parameter!")
elif counter > 10:
    print("Counter can not be greater than 10!")
else:
    # etc.

请注意,您几乎肯定使用Python 2,因此使用了太多括号。 Python 2中的print是一个语句,而不是一个函数,并且使用括号无论如何会导致您尝试打印元组:

>>> print('This is a tuple', 'with two values')
('This is a tuple', 'with two values')
>>> print 'This is just', 'two values'
This is just two values

您可能已经发现了这一点,因为您使用的print有两个参数,并且已经在一个位置没有括号。

while循环的测试也不需要使用括号:

while count <= counter:

不要使用while并手动递增count,而只需使用for循环和range()

if not isinstance(counter, int):
    print "Invalid parameter!"
elif counter > 10:
    print "Counter can not be greater than 10!"
else:
    for count in range(1, counter + 1):
       print 'The count is:', count

后一个循环也可以写成:

for count in range(counter):
   print 'The count is:', count + 1

答案 1 :(得分:1)

您可以稍微重写if / else语句,使其成为if / elif / else构造:

def countUpToTen(counter):
    if type(counter) is not int or counter == None:
        print("Invalid parameter!")
    elif counter > 10:
        print("Counter can not be greater than 10!")
        return False
    else:
        count = 1
        while (count <= counter):
            print 'The count is:', count
            count = count + 1
        print("Done counting !")

countUpToTen("0s")

这也可以提供您期望的输出。