无法获得一个应该返回bool的函数在python中工作

时间:2015-01-28 22:45:29

标签: python boolean

我写道:

def is_vowel(letter:str) ->bool:
    """
    takes a one-character-long string and returns 
    True if that character is a vowel and False otherwise.
    """
    if letter in ['a' or 'A' or 'e' or 'E' or 'i' or 'I' or 'o' or 
                  'O' or 'u' or 'U']:
        return True

print(is_vowel('A'))

但它会打印None。为什么呢?

2 个答案:

答案 0 :(得分:5)

首先,在解释器中查看('a' or 'A')。它将返回'a',因此您最初在列表中只查找一个字符['a']。这是因为长度大于零的字符串在True创建的布尔上下文中求值为oror将返回第一个真实的东西,在本例中为'a'

我建议为了可读性,使用如下面的函数,首先取字母的小写版本,然后判断它是否存在于所有这些字符的字符串的规范表示中,并且只返回测试的结果会员。不需要if-then控制流程:

def is_vowel(letter: str) -> bool:
    """
    takes a one-character-long string and returns True if 
    that character is a vowel and False otherwise.
    """
    return letter.lower() in 'aeiou'

print(is_vowel( 'b'))

在Python 2中,

def is_vowel(letter):
    """
    takes a one-character-long string and returns True if 
    that character is a vowel and False otherwise.
    """
    return letter.lower() in 'aeiou'

您获得None的原因是因为您的函数(下面简化的不同版本)如果不返回True则不返回False。当函数没有返回任何指定的内容时,它返回None。所以下面是一个更接近你的版本,如果它不返回True,则返回False。

def is_vowel(letter: str) -> bool:
if letter in ['a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U']:
    return True
else:
    return False

但我认为这写得更好:

def is_vowel(letter: str) -> bool:
    return letter in ['a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U']

或者就像我上面那样。

答案 1 :(得分:3)

使用in关键字:

if letter in ['a', 'e', 'i', ...]:

编辑:相关问题:How do I test one variable against multiple values?