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'
您可以使用 string
和 itertools.cycle
中的大小写转换函数来改变应用于每个字符的大小写转换函数。将所有这些都包含在一个连接语句中,你会得到:
''.join(case(c) for case,c in
zip(itertools.cycle((string.upper,string.lower)), 'helloworld'))
我正在尝试创建一个循环,它将获取用户输入的内容并在大写和小写之间交替打印。例如:用户输入 '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'
您可以使用 string
和 itertools.cycle
中的大小写转换函数来改变应用于每个字符的大小写转换函数。将所有这些都包含在一个连接语句中,你会得到:
''.join(case(c) for case,c in
zip(itertools.cycle((string.upper,string.lower)), 'helloworld'))