2013-10-08 77 views
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() 

爲什麼它告訴我,當我嘗試運行計數時沒有定義。我知道這些問題有很多,但我對功能很陌生,可以使用幫助。蟒蛇計數元音

+0

你真的不需要大寫的元音太,在你的for語句,只是寫字符串。 lower()那麼字符串中的所有字符將被轉換爲小寫 – 2013-10-08 09:47:59

回答

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沒用,因爲你實際上將它作爲用戶輸入。

另一個話題,你可以讓你的數位更Python:

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")) 
+0

,所以我應該打印(字符串,計數)? – Jake

+0

-1你甚至檢查過你的代碼嗎?它顯然覆蓋了一些變量,在有人擺脫了你的'NameError'(你通過修復OP的'NameError'生成的那個')之後。 – Tadeck

+0

@Tadeck問題不在於它。當然,你應該定義一個字符串來使其工作。編輯。 – sashkello

6

因爲計數已在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) 
+0

也許're'模塊在這裏是一個矯枉過正。你只需要計算匹配特定關鍵字的字母,不需要正則表達式(如果你會證明它更快,我會upvote)。 – Tadeck

+0

這可能是矯枉過正,我還沒有使用過或找到過。 – Jake

+0

re.finall可能不會更快(我沒有對它進行基準測試),但我認爲結果代碼更清晰更簡單 –