字符串中每三个字母大写一次-Python

字符串中每三个字母大写一次-Python,python,string,capitalize,Python,String,Capitalize,我才刚刚开始学习Python,所以请耐心听我说。我的数学知识也有点动摇。我能大写一个单词,或字符串中的第一个单词。我遇到的问题是,我需要将字符串中的每三个字母大写。我需要把它作为一个函数。 我用过类似的东西,但只能用一个词来改变字母,而不是每三个词 x = "string" y = x[:3] + x[3].swapcase() + x[4:] 有一个示例模板使用 if i in phrase (len(phrase)) 但我不确定这是怎么回事 我希望输出显示类似“此文本功能”的内容 提前

我才刚刚开始学习Python,所以请耐心听我说。我的数学知识也有点动摇。我能大写一个单词,或字符串中的第一个单词。我遇到的问题是,我需要将字符串中的每三个字母大写。我需要把它作为一个函数。 我用过类似的东西,但只能用一个词来改变字母,而不是每三个词

x = "string"
y = x[:3] + x[3].swapcase() + x[4:] 
有一个示例模板使用

if i in phrase (len(phrase))
但我不确定这是怎么回事

我希望输出显示类似“此文本功能”的内容


提前感谢您的帮助。

请尝试应用一些
拆分
,以及下面的
lambda
,然后
加入

>>> 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'

尝试应用一些
split
,以及
lambda
,如下所示,然后
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'

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

''.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()
,以实现您想要的功能。

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

''.join(phrase[i-1] if i % 3 or i == 0 else phrase[i-1].upper() for i in range(1, len(phrase) + 1))
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
如果您只想数字母:

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()

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

由于您需要每三个字母,而不仅仅是第三个字母,因此我们需要迭代这些字母,并根据字符的位置生成结果:

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
由于您需要每三个字母,而不仅仅是第三个字母,因此我们需要迭代这些字母,并根据字符的位置生成结果:

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

您可以对数组进行一次跨步切片,从而生成一个漂亮的、python式的几行:

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

现在还不清楚你想用空格做什么-这就把它们当作字符一样对待。

你可以从数组中选取一个跨步片段,这样就可以生成一个漂亮的、python式的几行:

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

不清楚您想要用空格做什么-这将它们视为字符。

字符串中的空格如何处理?它们是否被忽略或跳过?您的预期结果是不一致的-直到
函数
它似乎忽略了空格,但如果它忽略了空格,它应该是
函数
@zwer,op非常清楚:“我需要在字符串中每三个字母大写一次”。请不要提出OP没有提到的新要求@alfasin他的例子不清楚,因为它大写了第3、6、9、14和17个字母。@alfasin-从技术上讲,空格不是字母,所以他的问题不清楚,特别是从他的示例字符串来看。字符串中的空格呢?它们是否被忽略或跳过?您的预期结果是不一致的-直到
函数
它似乎忽略了空格,但如果它忽略了空格,它应该是
函数
@zwer,op非常清楚:“我需要在字符串中每三个字母大写一次”。请不要提出OP没有提到的新要求@alfasin他的例子不清楚,因为它大写了第3、6、9、14和17个字母。@alfasin-空格从技术上讲不是字母,所以他的问题不清楚,特别是从他的例子字符串来看。