Python中双循环中所有字符串的大小写

2024-04-24 14:16:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Python代码,它循环遍历字符串并将每个字符大写:

str = 'abcd'
l  = list(str)
for i in range(len(l)):
    rl = list(str)
    cap_char = l[i].capitalize()
    rl[i] = cap_char
    str1 = ''.join(rl)
    print str1

产生:

Abcd aBcd abCd abcD

我想增强这段代码,以增加连续字符的数量,使其大写,直到这个数字达到len(l)-1,以产生:

^{pr2}$

我在做索引运算时遇到了“索引超出范围”的错误,明白idice应该包装起来,但似乎不能生成一个优雅的代码;(


Tags: 字符串代码inforlenrange字符list
3条回答
import itertools
x = 'abcd'
n = len(x)
for i in xrange(1,n):
  combinations = itertools.combinations(range(n), i)
  for c in combinations:
    print ''.join([k if m not in c else k.upper() for m,k in enumerate(x)]),
  print '    >> - {0} char(s) capitalized'.format(i)

输出:

^{pr2}$

根据你对wim问题的回答,你要么想要wim's answer要么这样:

>>> def upper_case(str_, start, end):
...  substr = str_[start:end].upper()
...  return str_[:start] + substr + str_[end:]
... 
>>> def raise_combinations(str_, length):
...  for x in xrange(len(str_) - length + 1):
...   print(upper_case(str_, x, x + length))
... 
>>> raise_combinations('abcdefghi', 1)
Abcdefghi
aBcdefghi
abCdefghi
abcDefghi
abcdEfghi
abcdeFghi
abcdefGhi
abcdefgHi
abcdefghI
>>> raise_combinations('abcdefghi', 4)
ABCDefghi
aBCDEfghi
abCDEFghi
abcDEFGhi
abcdEFGHi
abcdeFGHI

编辑:当然,如果你想在上面循环:

^{pr2}$

计算索引号时使用模运算符:

idx = idx % len(str)

顺便说一句,在python中不要使用str作为变量名。要了解原因,请尝试以下操作:

^{pr2}$

相关问题 更多 >