字符串中每三个字母大写一次-Python
我才刚刚开始学习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)) 但我不确定这是怎么回事 我希望输出显示类似“此文本功能”的内容 提前
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-空格从技术上讲不是字母,所以他的问题不清楚,特别是从他的例子字符串来看。