0
4

3 に答える 3

1

whileループが終了しないため、これらの場合、コードは機能しません。そのforループが終了すると、whileループは永遠に続きます。

コードを修正するには、ループが終了flag = Falseしたら次のように設定します。for

def vowels_or_not (st, ch):
    vowels = ('a','e','i','o','u','A','E','I','O','U')
    flag = True
    a = 0
    aux = ''
    while flag is True:
        for i in range(len(st)):        
            if (st[i] == ch):
                flag = False
                break
            else:
                if (st[i] in vowels):
                    aux = aux + st[i]
                    a = a + 1
                if (st[i] not in vowels):
                    aux = aux + '$'
                    a = a + 1

        flag = False   # <-- Right here
    return aux

そして例:

>>> vowels_or_not('a', 'x')
'a'
>>> vowels_or_not('x', 'a')
'$'

コードを少し改善するには、インデックスを使用しないでください。Python では、文字列を直感的に反復処理できます。

def vowels_or_not(word, character):
    vowels = 'aeiou'
    output = ''

    before, middle, after = word.partition(character)

    for letter in before:
        if letter.lower() in vowels:
            output += letter
        else:
            output += '$'

    return output + middle + after
于 2012-11-01T05:41:42.690 に答える
0

あなたの問題は、の最後の文字がstと同じでない場合、 while ループが終わらないことchです。

ただし、while ループは冗長であるため、実際には必要ありません。必要なのは for ループだけです。

def vowels_or_not(st, ch):
    vowels = ('a','e','i','o','u','A','E','I','O','U')
    a = 0
    aux = ''
    for i in range(len(st)):
        if (st[i] == ch):
            break
        else:
            if (st[i] in vowels):
                aux = aux + st[i]
                a = a + 1
            if (st[i] not in vowels):
                aux = aux + '$'
                a = a + 1
    return aux

>>> vowels_or_not('a', 'X')
'a'
>>> vowels_or_not('aaaAX', 'X')
'aaaA'
>>> vowels_or_not('aaabX', 'X')
'aaa$'
于 2012-11-01T05:45:14.227 に答える
0
import functools # for python3 reduce (working under python2 too)

vowels = 'aeiouAEIOU'

def vowels_or_not (st, ch):
    return functools.reduce(lambda a,b:a+(b in vowels and b or '$'), st.partition(ch)[0],'')

またはより長いバージョン

vowels = 'aeiouAEIOU'

def vowels_or_not_longer_version (st, ch):
    ret=''
    for i in st.partition(ch)[0]:
        ret+= i in vowels and i or '$'
    return ret
于 2012-11-01T09:58:19.897 に答える