#Dancing Text :D
listinput = raw_input("Input text(usually between 1-10 letters ")
dance_time = raw_input("Alternate How Many Times? ")
listinput = list(listinput)
length = len(listinput)
alternate = 0
counter = 0
first_input = listinput
swap_counter = 0
tempchar = ""
counter = int(counter) #Just to make sure...getting errors
#above are just defining variable types and changing types to lists.
while counter <= length:
if alternate == 0: #first, third, fifth character
alternate = alternate + 1
counter = counter + 1
elif alternate == 1: #second, fourth, sixth character and so on....
tempchar = listinput[counter]
tempchar = str(tempchar)
tempchar = tempchar.swapcase()
listinput[counter] = tempchar #It should be the number 1 the first time it runs, but it gives a index error.
alternate = alternate - 1
counter = counter + 1
while swap_counter <= dance_time:
print first_input
print input
swap_counter = swap_counter + 2
这是错误 -
第20行,在模块
中tempchar = listinput [counter]
IndexError:列表索引超出范围
我查找索引错误,'1'应该在列表范围内,(每当我测试它时,我输入'hello')
如果我理解正确,第20行,当它运行时应该是“listinput [1]”,变量'counter'为1,因为它只循环一次。
答案 0 :(得分:0)
我认为你的问题是你假设列表的索引从1开始。实际上它们从0开始。所以如果列表中有一个项目[0]会给你那个项目。
所以,能够执行
tempchar = listinput[counter]
你必须确定
counter < length
是真的,这不是这里的情况,因为counter可以等于length。
答案 1 :(得分:0)
您的dance_time
是一个字符串。请使用swap_counter <= int(dance_time):
如果事情可能有所帮助,可以选择一对夫妇:
你不需要一个模板。您可以转换代码:
tempchar = listinput[counter]
tempchar = str(tempchar)
tempchar = tempchar.swapcase()
listinput[counter] = tempchar
到单线:
listinput[counter] = str(listinput[counter]),swapcase()
请注意,您只是根据alternate
的值交换交替字符的大小写。我猜这个虽然在这个例子中设置为0
,但在真实的程序中,你会想要随意改变它。然后,您可以尝试以下方法:
for i, l in enumerate(listinput):
if alternate == 0:
if i%2 == 1: # odd samples
listinput[i] = str(listinput[i]).swapcase()
elif alternate == 1:
if i%2 == 0: # even samples
listinput[i] = str(listinput[i]).swapcase()
else:
pass
或者简单地说:
for i, l in enumerate(listinput):
if (alternate+i)%2 == 1: # odd samples
listinput[i] = str(listinput[i]).swapcase()
这是相同的,假设alterante
是0
或1
,之前可以使用if
条件轻松检查。
最后,请注意Python中的函数是一等值。所以你也可以返回一个函数,并将其用作条件,如下所示:
def evenOdd(alternate):
if alternate == 0: return lambda x: x%2 == 1
elif alternate == 1: return lambda x: x%2 == 0
print [ (l.swapcase() if evenOdd(alternate)(i) else l) for i, l in enumerate(listinput) ]
这有点容易阅读...
再次在这里,我保持简单。如果替代是除raise
或ValueError
之外的任何内容,你可能希望在evenOdd
函数中0
1
。
最后,按照上面的例子,你也可以这样做:
[(l.swapcase() if (i+alternate)%2==0 else l) for i, l in enumerate(listinput)]