Python for 循环:索引超出范围错误

Python for loop: index out of range error

我正在尝试创建一个循环,它将获取用户输入的内容并在大写和小写之间交替打印。例如:用户输入 'helloworld',它打印回 'HeLlOwOrLd'。这是我目前所拥有的(相信我,我知道这不是最优的,这正是我可以开始工作的):

s = input("enter characters: ")
word = ''
count = 0


for i in s:
        up = s[::2]
        up2 = up.upper()
        up3 = up2[0 + count]
        low = s[1::2]
        low2 = low.lower()
        low3 = low2[0 + count]
        word += up3 + low3
        count += 1

print(word)

当我在调试器中跟踪它时,word 得到正确的值,然后它再次运行循环,从而得到索引超出范围的错误。想法?

你的循环次数太多了。您在循环中将 s 分成两半,但对 s 中的每个字符循环一次。

s = input("enter characters: ")
word = ''


for count in range(len(s[::2])):
        up = s[::2]
        up2 = up.upper()
        up3 = up2[0 + count]
        low = s[1::2]
        low2 = low.lower()
        if(len(low2)>count):
            low3 = low2[0 + count]
        else:
            low3=''
        word += up3 + low3
        count += 1

print(word)

干杯!

count 最终等于 s 的长度。但是,您使用 count 作为比 s 短的字符串的索引,例如 up3.

尝试以下操作:

>>> result = ''
>>> word = 'hello'
>>> for i in range(len(word)):
...     result += (word[i].lower() if i%2 else word[i].upper())
...
>>> result
'HeLlO'

还有:

>>> word = 'HellOWorLD'
>>> ''.join(word[i].lower() if i%2 else word[i].upper() for i in range(len(word)))
'HeLlOwOrLd'

您可以使用 stringitertools.cycle 中的大小写转换函数来改变应用于每个字符的大小写转换函数。将所有这些都包含在一个连接语句中,你会得到:

''.join(case(c) for case,c in 
    zip(itertools.cycle((string.upper,string.lower)), 'helloworld'))