我正在学习python的基础知识,并尝试解决上述问题。但是,我在这一点上陷入困境:当我修改代码时,一切似乎都没问题,但是我收到了错误:
print repr(string), numbers_in_lists(string) == result
File "/tmp/vmuser_tmqtokdyaa/main.py", line 25, in numbers_in_lists
while int(string[i]) <= prev:
IndexError: string index out of range
我确实修改了具有相同IndexError问题的其他线程,但它并没有解决我的情况。有线索吗?提前谢谢。
执行任务:
SeanMc在论坛中列出的数字 定义一个从1-9和1开始接收一串数字的过程 输出包含以下参数的列表: 字符串中的每个数字都应插入列表中。 如果字符串中的数字x小于或等于 在前面的数字y中,应插入数字x 进入子列表。继续添加以下数字到 子列表直到达到数字z 大于y。 然后将此数字z添加到正常列表中并继续。
def numbers_in_lists(string):
i=0
prev = 0
list = []
sublist = []
while i< len(string):
if int(string[i]) > prev:
list.append(string[i])
prev = int(string[i])
i +=1
else:
while int(string[i]) <= prev:
sublist.append(string[i])
i +=1
list.append(sublist)
sublist = []
return list
#testcases
string = '543987'
result = [5,[4,3],9,[8,7]]
print repr(string), numbers_in_lists(string) == result
string= '987654321'
result = [9,[8,7,6,5,4,3,2,1]]
print repr(string), numbers_in_lists(string) == result
string = '455532123266'
result = [4, 5, [5, 5, 3, 2, 1, 2, 3, 2], 6, [6]]
print repr(string), numbers_in_lists(string) == result
string = '123456789'
result = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print repr(string), numbers_in_lists(string) == result
答案 0 :(得分:1)
发生这种情况是因为在这个内部while
,您收到错误,您不会检查i < len(str)
是否继续增加,只检查与此问题无关的条件,忽略您是否& #39;已达到字符串的最后一个字符。
我会改为:
def numbers_in_lists(string):
i=0
prev = 0
list = []
sublist = []
while i< len(string):
if int(string[i]) > prev:
list.append(string[i])
prev = int(string[i])
i +=1
else:
while i< len(string) and int(string[i]) <= prev:
sublist.append(string[i])
i +=1
list.append(sublist)
sublist = []
return list
我会考虑在你的情况下使用for循环而不是while,但无论如何都在上面。