2017-09-15 2 views
1

그래서 저는 파이썬을 배우며 문장에서 모음의 수를 계산하려고합니다. count() 함수와 반복을 사용하는 방법을 알았지 만 지금은 재귀를 사용하여 수행하려고합니다. 다음 메서드를 사용하면 "IndexError : 문자열 인덱스가 범위를 벗어났습니다."오류가 발생합니다. 여기 내 코드가있다.IndexError : String 인덱스가 재귀 함수의 범위를 벗어났습니다.

sentence = input(": ") 

def count_vowels_recursive(sentence): 
    total = 0 
    if sentence[0] == "a" or sentence[0] == "e" or sentence[0] == "i" or sentence[0] == "o" or sentence[0] == "u": 
     total = total + 1 + count_vowels_recursive(sentence[1:]) 
    else: 
     total = total + count_vowels_recursive(sentence[1:]) 
    return the_sum 

print(count_vowels_recursive(sentence)) 

다음은 이전 두 가지 해결책입니다.

def count_vowels(sentence): 
    a = sentence.count("a") 
    b = sentence.count("e") 
    c = sentence.count("i") 
    d = sentence.count("o") 
    e = sentence.count("i") 
    return (a+b+c+d+e) 



def count_vowels_iterative(sentence): 
    a_ = 0 
    e_ = 0 
    i_ = 0 
    o_ = 0 
    u_ = 0 
    for i in range(len(sentence)): 
     if "a" == sentence[i]: 
      a_ = a_ + 1 
     elif "e" == sentence[i]: 
      e_ = e_ + 1 
     elif "i" == sentence[i]: 
      i_ = i_ + 1 
     elif "o" == sentence[i]: 
      o_ = o_ + 1 
     elif "u" == sentence[i]: 
      u_ = u_ + 1 
     else: 
      continue 
    return (a_ + e_ + i_ + o_ + u_) 
+0

힌트 : 재귀가 문자열의 끝에 도달하여'문장 [0]'을 테스트하려고하면 어떻게됩니까? –

답변

1

기본 사례가 없습니다. 이 함수는 sentence이 비어있을 때까지 계속 반복됩니다.이 경우 첫 번째 if 문은 해당 인덱스 오류를 발생시킵니다.

당신은 첫 번째 문장 비어 있으며 경우 모든 검사 그렇다면하여 반환해야 당신은 꽤 물건을 단축 할 수 0

0

:

def count_vowels_recursive(sentence): 
    # this base case is needed to stop the recursion 
    if not sentence: 
     return 0 
    # otherwise, sentence[0] will raise an exception for the empty string 
    return (sentence[0] in "aeiou") + count_vowels_recursive(sentence[1:]) 
    # the boolean expression `sentence[0] in "aeiou"` is cast to an int for the addition 
+0

'return (aeiou의 문장 [0]) + count_vowels_recursive (문장 [1 :])'(Python은 False를 0으로, True를 1로 계산합니다. –

+0

사실이 강요가 초보자에게 더 모호 할지라도. – schwobaseggl

0

당신이 시도 할 수 있습니다 :

def count_vowels_recursive(s, count): 
    if not s: 
     return count 
    else: 
     new_count = count 
     if s[0] in ["a", "e", "i", "o", "u"]: 
      new_count += 1 
     return count_vowels_recursive(s[1:], new_count) 
관련 문제