这应该是一个函数的一部分,该函数用'$'
替换辅音,直到达到"ch"
字符,然后它将停止。
示例:
vowels_or_not(‘abcdeAghi’, ‘A’)
应该返回‘a$$$e’
vowels_or_not(‘aaaaA’, ‘A’)
应该返回‘aaaa’
我的问题是,如果输入字符串只有一个字符长,它就没有做任何事情。 vowels_or_not(a, X)
应该返回a
而vowels_or_not(x, A)
应该返回$
。其他一切都很好。我尝试修复它,但我仍然没有看到代码有什么问题,但我又是一个初学者!任何帮助将不胜感激。
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
return aux
答案 0 :(得分: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
答案 1 :(得分:0)
如果st
中的最后一个字符与ch
不同,那么你的问题就是你的while循环永远不会结束。
但是你并不需要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$'
答案 2 :(得分: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