3
def main():
    print(count)


def countVowels(string):
    vowel=("aeiouAEIOU")
    count=0
    string=input("enter a string:")
    for i in string:
        if i in vowel:
            count +=1
main()

为什么它告诉我在我尝试运行它时未定义计数。而且我知道有多个这些问题,但我是新功能,可以使用帮助。

4

2 回答 2

6

因为 count 已在 countVowels 中定义。您可能应该让该函数进行计数,然后返回计数,并在其他地方请求输入:

import re

def count_vowels(string):
    vowels = re.findall('[aeiou]', string, re.IGNORECASE)
    return len(vowels)

string = input("Enter a string:")
print count_vowels(string)
于 2013-10-08T02:01:24.840 回答
5

因为count是局部变量。它仅针对countVowels功能定义。此外,您只定义countVowels函数,但从不运行它。所以count即使在那个函数中也永远不会创建......

你可以这样做:

def main(x):
    print(x)

def countVowels():
    vowels = "aeiouAEIOU"
    count = 0
    string = raw_input("enter a string:")
    for i in string:
        if i in vowels:
            count += 1
    return count

main(countVowels())

这里countVowels返回计数,然后您可以打印它或将其分配给变量或使用它做任何您想做的事情。您还遇到了我修复的其他一些错误...即,函数参数string是无用的,因为您实际上将其作为用户输入。

在另一个主题上,你可以让你的计数更 Pythonic:

sum(letter in vowel for letter in string)

此外,在这里我不认为需要创建一个全新的函数来打印您的结果......只要做print(countVowels()),你就完成了。

另一个改进是只关心小写字母,因为你并没有真正区分它们:

vowels = "aeiou"
string = string.lower()

如果您不想接受用户输入,而是想计算给定单词中的元音,您可以这样做(包括上面概述的改进):

def countVowels(string):
    vowels = "aeiou"
    string = string.lower()
    return sum(letter in vowel for letter in string)

print(countVowels("some string here"))
于 2013-10-08T01:55:49.637 回答