我写道:
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
。为什么呢?
答案 0 :(得分:5)
首先,在解释器中查看('a' or 'A')
。它将返回'a'
,因此您最初在列表中只查找一个字符['a']
。这是因为长度大于零的字符串在True
创建的布尔上下文中求值为or
。 or
将返回第一个真实的东西,在本例中为'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', ...]: