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

时间:2015-04-03 00:24:35

标签: python loops for-loop indexing range

我试图创建一个循环,该循环将采用用户输入的内容并在大写和小写之间交替打印。例如:用户输入' 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会出现正确的值,然后它再次运行循环,从而使索引超出范围错误。想法?

3 个答案:

答案 0 :(得分:2)

你的循环次数太多了。你在循环中将你的分裂成两半,但是为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)

干杯!

答案 1 :(得分:2)

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'

答案 2 :(得分:0)

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

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