墨西哥波浪效应在Python中

时间:2017-09-21 21:06:34

标签: python-3.x

我正在尝试解决墨西哥波问题,其中每个其他角色都应该大写,并且应该返回到字符串。 例如:['你好']应该是['你好','hEllo','heLlo','helLo','hellO'] 我写的代码工作得很好但是当两个相同的字母出现时,它同时将两者都大写。 这是我的代码:

s='hello'
new=[]
for i, val in enumerate(s[:]):
    up=s[i].upper()
    c=s.replace(s[i],up)
    new.append(c)
print(new)

2 个答案:

答案 0 :(得分:2)

str.replace返回字符串的副本,其中旧的出现已被new替换,可选择将替换次数限制为max。在您的示例中,字母l的所有小写字母都替换为L。相反,尝试字符串切片,如下所示:

s='hello'
new=[]
for i, val in enumerate(s[:]):
    up=s[i].upper()
    c=s[:i] + up + s[i+1:]
    new.append(c)
print(new)

输出:

['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']

答案 1 :(得分:2)

这可以用更少的代码行完成:

s='hello'
new=[]
for i, val in enumerate(s):
    new.append("{0}{1}{2}".format(s[:i],s[i].upper(),s[i+1:]))
print(new)