gpt4 book ai didi

python - 函数中的空格和字符串有问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:27 24 4
gpt4 key购买 nike

提示

Turn a string into rollercoaster case. The first letter of the sentence is uppercase, the next lowercase, the next uppercase, and so on.

代码

with open('test.txt') as file:
for line in file:
words = line.split()
for word in words:
chars = list(word)
for index, char in enumerate(chars):
if index == 0:
print char.upper(),
elif is_even(index):
print char.upper(),
elif is_odd(index):
print char,

输入

Sunshine makes me happy, on a cloudy day

输出

S u N s H i N e M a K e S M e H a P p Y , O n A C l O u D y D a Y

这是我第一次尝试解决这个问题。除了遍历每个字母之外,我想不出任何其他方法来做到这一点。当我这样做时,虽然我只是将整个句子视为一个字符串并吐出字符。

最佳答案

您可以使用扩展切片将每隔一个字母大写,每隔一个字母选取一次:

>>> sample = 'Sunshine makes me happy, on a cloudy day'
>>> sample[::2].upper()
'SNHN AE EHPY NACOD A'
>>> sample[1::2].lower()
'usiemksm ap,o luydy'

现在您需要做的就是将它们重新组合起来:

from itertools import izip_longest

result = ''.join([l
for pair in izip_longest(sample[::2].upper(), sample[1::2].lower(), fillvalue='')
for l in pair])

izip_longest() 再次将大写和小写字符串配对,确保如果字符数为奇数,则用空字符串填充序列。

演示:

>>> from itertools import izip_longest
>>> ''.join([l
... for pair in izip_longest(sample[::2].upper(), sample[1::2].lower(), fillvalue='')
... for l in pair])
'SuNsHiNe mAkEs mE HaPpY, oN A ClOuDy dAy'

注意这里没有忽略空格; makem 是小写的,即使 Sunshine 末尾的 e 也是小写的。

如果你需要更精确地改变字母,你仍然可以使用迭代:

from itertools import cycle
from operator import methodcaller

methods = cycle((methodcaller('upper'), methodcaller('lower')))
result = ''.join([next(methods)(c) if c.isalpha() else c for c in sample])

在这里itertools.cycle()让我们在两个 operator.methodcaller() objects 之间交替, 传入参数的大写或小写。当字符是字母时,我们仅前进到下一个(使用 next() )。

演示:

>>> from itertools import cycle
>>> from operator import methodcaller
>>> methods = cycle((methodcaller('upper'), methodcaller('lower')))
>>> ''.join([next(methods)(c) if c.isalpha() else c for c in sample])
'SuNsHiNe MaKeS mE hApPy, On A cLoUdY dAy'

关于python - 函数中的空格和字符串有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25627211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com