我正在学习 udacity 类(class),但我陷入了一项练习中。我已经改变了我的代码一千次,但我认为我还没有接近正确的答案。练习是这样的: 定义一个过程,该过程接受 1-9 之间的数字字符串并 输出具有以下参数的列表: 字符串中的每个数字都应插入到列表中。 如果字符串中的数字 x 小于或等于 对于前面的数字 y,应插入数字 x 到一个子列表中。继续将以下数字添加到 子列表直到达到数字 z 大于数字 y。 然后将此数字 z 添加到正常列表中并继续。因此,如果字符串为“543987”,则输出应为 [5,[4,3],9,[8,7]]。
我的代码是:
string = '543987'
def numbers_in_lists(string):
result = []
sublist = []
counter = 0
ref = 0
for e in string:
if e == string[0]:
result.append(int(e))
if int(e) < ref:
sublist.append(int(e))
else:
result.append(sublist)
sublist = []
result.append(int(e))
counter = counter + string.find(e)
ref = int(string[counter])
return result
print numbers_in_lists(string)
# [5, [], 5, [4, 3], 9] which is not what i expected ([5,[4,3],9,[8,7]])
这也太惨了吧??希望可以有人帮帮我。 谢谢!!
最佳答案
字符串中的每个字母只有两个选项
if int(letter) > last_letter:
if sublist: # if we have any entries in our sublist
result.append(sublist) # append them before appending this letter
sublist = [] # clear sublist
result.append(int(letter)) # append our letter
else: # it must be lessthan or equal
sublist.append(int(letter)) # so append to sublist
last_letter = int(letter) # update last_letter
然后在返回结果之前最后进行相同的检查
if sublist: result.append(sublist)
return result
关于python基础程序练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664771/