2013-10-08 5 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 문이나 for 문에서 대문자로 된 모음이 필요하지 않습니다. lower() 그러면 문자열의 모든 문자가 소문자 –

답변

5

count은 로컬 변수이기 때문에. countVowels 기능에 대해서만 정의됩니다. 또한 countVowels 함수 만 정의하고 실행하지 마십시오.

다음
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 반환 카운트를 한 다음 그것을 인쇄하거나 변수에 할당하거나 어떤 작업을 수행 할 수 있습니다 그래서 count 당신은 대신이 작업을 수행 할 수

... 심지어 함수 내에서 생성되지 않습니다 그것과 함께 원한다. 또한 몇 가지 다른 오류가 수정되었습니다 ... 즉, 함수 인수 string은 실제로 사용자 입력으로 사용하면 유용하지 않습니다. 다른 주제에

, 당신은 당신의 수가 좀 더 파이썬 만들 수 있습니다

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 Question은 그것에 관한 것이 아닙니다. 틀림없이 문자열을 정의하여 작동하도록해야합니다. 편집 됨. – 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' 모듈은 과잉입니다. 특정 critieria와 일치하는 문자를 계산할 필요가 있습니다. 정규 표현식이 필요하지 않습니다 (속도가 더 빠르다고 증명할 경우 upvote합니다). – Tadeck

+0

과용 될 수 있습니다. 아직 re 또는 findall을 사용하지 않았습니다. – Jake

+0

re.finall이 더 빠르지는 않습니다 (벤치 마크하지 않았습니다). 그러나 결과 코드가 훨씬 명확하고 단순하다고 생각합니다. –