質問する
75 次
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 に答える