我刚开始学习Python,所以请耐心等待。我的数学知识也有些不稳定。我能够将单个单词或字符串中的第一个单词大写。我遇到的问题是我需要大写字符串中的每个第3个字母。我需要做这个功能。 我曾经使用过类似的东西,但只能用一个字来改变字母,而不是每隔三个字。
x = "string"
y = x[:3] + x[3].swapcase() + x[4:]
有一个使用
的示例模板if i in phrase (len(phrase))
但我不确定这是如何运作的。
我希望输出显示类似于" thIs tExtIng fuNctIon"
提前感谢您的帮助。
答案 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)
尝试应用一些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'
答案 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