我正在处理一个接收输入字符串(st)和字符(ch)的函数。字符串st可以包含字母,数字和符号。该函数应返回一个新字符串,该字符串具有与原始字符串相同的元音(任何'aeiou'或'AEIOU'),并且与st中的位置相同,而对于其他位置,它应具有符号' $',但只包括这些字符,直到并且不包括字符ch的第一次出现(即使ch是元音)。 (返回的字符串可能比原始字符串短,也可能是空字符串。)
我已将字符串转换为列表,以便将不是元音的字符更改为符号'$',但我不明白如何进行此更改。这是我尝试过的,
def vowels_or_not (st, ch)
newst=list(st)
n= st.find('ch')
nt=n+1
sign='$'
con=list('bcdfghjklmnpqrstvwxyz')
for con in newst:
del con
del newst[nt:]
return sign.join(newst)
但它不起作用。
我该怎么做?
答案 0 :(得分:2)
一种不那么“循环”的方法:
def vowels_or_not(string, char):
left, mid, right = string.partition(char)
# left is now a string with everything BEFORE the first occurence of char
left = [(c if (c.lower() in "aeiou") else '$')
for c in left]
# left is now a list of all characters in the original left with vowels
# replaced with $
return ''.join(left)
print vowels_or_not('abcdefghijklmno', 'i')
# => a$$$e$$$
答案 1 :(得分:0)
你想选择一个不同的变量来迭代for循环,比如说:con
,然后对于辅佐列表,比如说cons
。我选择了这两个名字,因为它们通过复数形式有一些含义,暗示它是一个列表而不是单个元素。如果您选择相同的变量,则重新定义的con将等于字符串中的此元素,而不是辅音列表。
答案 2 :(得分:0)
一种简单的方法:
def func(st,ch):
con='bcdfghjklmnpqrstvwxyz'
vow="aeiou"
sign="$"
ans=""
for x in st:
if x !=ch:
if x in con:
ans+="$"
else:
ans+=x
else:
break
return ans
print func("abcdeefhkfgosdmvnsvh","k")
print func("adbfkjsdbksdbv","a")
print func("iduskjfhdrsqksd","j")
<强>输出:强>
a$$$ee$$
i$u$$
答案 3 :(得分:0)
itertools是你的朋友。
使用itertool函数,它变成了一个简单的oneliner,甚至不值得一个函数。
st = "printing until k and not over"
ch = "k"
from itertools import takewhile
"".join( c if c in 'aeiouAEIOU' else '$' for c in takewhile(lambda k: k!=ch,st) )
当字符与给定字符不同时,它会通过字符串,如果不是元音,则替换迭代字符。