我有一个类似的功能可以打印出正确的答案,为什么这个会打印两次车?
def countvowels(string):
num_vowels=0
for char in string:
if char is 'A' or 'a' or 'E' or 'e' or 'i' or 'I' or 'U' or 'u' or 'O' or 'o':
num_vowels+=1
return num_vowels
string='cars'
print(string)
countvowels(string)
print(string)
答案 0 :(得分:1)
您的代码存在多个问题。首先,您使用is
检查值是否相等,但is
实际上用于检查引用是否相等。您希望使用==
之类的内容来比较值。
接下来,您调用函数但不存储结果,因此函数的结果将被丢弃。
您可以使用in
:
if char.lower() in 'aeiou'
您可以使用列表理解来进一步简化:
numvowels = sum([1 for char in s if char in 'aeiou'])
将它们绑在一起并打印结果:
def count_vowels(s):
return sum([1 for char in s if char in 'aeiou'])
print(count_vowels('something'))
输出:
3
一个小小的挑剔:你想避免命名像string
之类的变量,因为这是一个内置库并且覆盖它会导致奇怪的行为。
答案 1 :(得分:0)
这是打印两次的原因是因为你正在调用打印函数两次(在函数之前和之后),但这很简单,我想提供一些使这段代码更具可读性的技巧。
1)您可以将其写成以下内容,而不是编写long if语句:
if char.lower() in ["a","e","i","u","o"]
2)在python中有一个几乎每个你想要做的书面实现,在这个例子中你可以(而不是计算你的自己 - 虽然可能有些不同意):
num_of_vowels= 0
string = string.lower()
for vowel_char in ["a","e","i","u","o"]:
num_of_vowels += string.count(vowel_char)
return num_of_vowels
3)不要调用字符串,“字符串”不仅不是解释性的,而且还会与字符串库发生冲突。
4)不要用于比较字符串,而是使用'=='。