python-string作为函数参数

时间:2018-05-01 14:37:07

标签: python string function

我有一个类似的功能可以打印出正确的答案,为什么这个会打印两次车?

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)

2 个答案:

答案 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)不要用于比较字符串,而是使用'=='。