将字符串中的每个第3个字母大写 - Python

时间:2017-07-27 23:14:45

标签: python string capitalize

我刚开始学习Python,所以请耐心等待。我的数学知识也有些不稳定。我能够将单个单词或字符串中的第一个单词大写。我遇到的问题是我需要大写字符串中的每个第3个字母。我需要做这个功能。 我曾经使用过类似的东西,但只能用一个字来改变字母,而不是每隔三个字。

x = "string"
y = x[:3] + x[3].swapcase() + x[4:] 

有一个使用

的示例模板
if i in phrase (len(phrase))

但我不确定这是如何运作的。

我希望输出显示类似于" thIs tExtIng fuNctIon"

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

你可以采用一个阵列的步幅切片,这样就可以产生漂亮而诡异的几行:

s = "thisisareallylongstringwithlotsofletters"  

# convert to list
a = list(s)

#change every third letter in place with a list comprehension
a[2::3] = [x.upper() for x in a[2::3]]

#back to a string
s = ''.join(a)

# result: thIsiSarEalLylOngStrIngWitHloTsoFleTteRs

不清楚你想要什么空间 - 这就像对待他们一样。

答案 1 :(得分:0)

尝试应用一些splitlambda,如下所示,然后join

>>> x = "this texting function"
>>> " ".join(map(lambda w: w[:2] + w[2].swapcase() + w[3:], x.split()))
'thIs teXting fuNction'

如果你不是lambda的粉丝,那么你可以写一个像这样的方法

>>> def swapcase_3rd(string):
...     if len(string) >3:
...             return  string[:2] + string[2].swapcase() + string[3:]
...     if len(string) == 3:
...             return  string[:2] + string[2].swapcase()
...     return string
...
>>> x = "this texting function"
>>> " ".join(map(swapcase_3rd, x.split()))
'thIs teXting fuNction'

答案 2 :(得分:0)

如果你不关心字母和空格:

''.join(phrase[i-1] if i % 3 or i == 0 else phrase[i-1].upper() for i in range(1, len(phrase) + 1))

如果你只想数字:

new_phrase = ''
phrase = "here are some words"
counter = 0
for c in phrase:
    if not c.isalpha():
        new_phrase += c
    else:
        counter += 1
        if not counter % 3:
            new_phrase += c.upper()
        else:
            new_phrase += c

由于您的示例显示您使用的是swapcase()而不是upper(),因此您可以在此代码中将upper()替换为swapcase(),以实现该功能,如果这是您想要的。

答案 3 :(得分:0)

x = "string"
z = list(x)
for x in range(2,len(z),3): # start from 3rd (index2) and step by 3  
  z[x] = z[x].upper()
x = ''.join(z)
print x

输出:StrIng

答案 4 :(得分:0)

由于你想要每个第三个​​字母而不仅仅是第三个字母,我们需要迭代字母并根据字符的位置生成结果:

def cap_3rd(word):
    result = ""
    for i in range(1, len(word) + 1):
        if i % 3 == 0:
            result += word[i-1].upper()
        else:
            result += word[i-1]
    return result


word = "thisisaverylonglongword"
print(cap_3rd(word))  # thIsiSavEryLonGloNgwOrd