外壳在循环和'时停止;转换';字典中的值(Python 2.7.5)

外壳在循环和'时停止;转换';字典中的值(Python 2.7.5),python,shell,loops,dictionary,Python,Shell,Loops,Dictionary,我正在构建一个程序,以递归方式对给定列表中的数字求和。比如说,如果源列表有10个元素,那么第二个列表将有9个元素,第三个列表将有8个元素,依此类推,直到最后一个列表只有一个元素。通过将第一个元素添加到第二个元素,然后将第二个元素添加到第三个元素,依此类推。没有壳牌公司的反馈,我陷入困境。它停止了,没有抛出任何错误,然后在几秒钟内风扇像疯了一样旋转 我在这里读了不少帖子,并改变了我的方法,但我不确定到目前为止所做的事情是否能产生我想要的结果。提前感谢: #---------------------

我正在构建一个程序,以递归方式对给定列表中的数字求和。比如说,如果源列表有10个元素,那么第二个列表将有9个元素,第三个列表将有8个元素,依此类推,直到最后一个列表只有一个元素。通过将第一个元素添加到第二个元素,然后将第二个元素添加到第三个元素,依此类推。没有壳牌公司的反馈,我陷入困境。它停止了,没有抛出任何错误,然后在几秒钟内风扇像疯了一样旋转

我在这里读了不少帖子,并改变了我的方法,但我不确定到目前为止所做的事情是否能产生我想要的结果。提前感谢:

#---------------------------------------------------
#functions
#---------------------------------------------------

#sum up pairs in a list
def reduce(inputList):
    i = 0
    while (i < len(inputList)):
        #ref to current and next item
        j = i + 1
        #don't go for the last item
        if j != len(inputList):
            #new number eq current + next number
            newNumber = inputList[i] + inputList[j]
            if newNumber >= 10:
                #reduce newNumber to single digit
                newNumber = sum(map(int, str(newNumber)))
            #collect into temp list
            outputList.append(newNumber)
        i = i + 1
    return outputList;


#---------------------------------------------------
#program starts here
#---------------------------------------------------

outputList = []
sourceList = [7, 3, 1, 2, 1, 4, 6]
counter = len(sourceList)

dict = {}
dict[0] = sourceList

print '-------------'
print 'Level 0:', dict[0]

for i in range(counter):
    j = i + 1
    if j != counter:
        baseList = dict.get(i)
        #check function to understand what it does
        newList = reduce(baseList)
        #new key and value from previous/transformed value
        dict[j] = newList        
        print 'Level %d: %s' % (j, dict[j])
#---------------------------------------------------
#功能
#---------------------------------------------------
#在一个列表中总结两对
def REDUCT(输入列表):
i=0
而(i=10:
#将newNumber减少到一位数
newNumber=sum(map(int,str(newNumber)))
#收集到临时列表中
outputList.append(newNumber)
i=i+1
返回输出列表;
#---------------------------------------------------
#节目从这里开始
#---------------------------------------------------
outputList=[]
sourceList=[7,3,1,2,1,4,6]
计数器=len(源列表)
dict={}
dict[0]=源列表
打印'-------------'
打印“0级:”,dict[0]
对于范围内的i(计数器):
j=i+1
如果j!=柜台:
基本列表=dict.get(i)
#检查函数以了解其功能
newList=reduce(基本列表)
#来自上一个/转换后的值的新键和值
dict[j]=新列表
打印“级别%d:%s%”(j,dict[j])

您的程序始终使用您在外部定义的相同的
输出列表。每次调用
reduce
时,都必须清除它。相反,您可以创建具有相同名称的局部变量。为此,只需将
outputList
的定义移动到
reduce
函数中,如下所示

def reduce(inputList):
    outputList = []
    i = 0
输出

-------------
Level 0: [7, 3, 1, 2, 1, 4, 6]
Level 1: [1, 4, 3, 3, 5, 1]
Level 2: [5, 7, 6, 8, 6]
Level 3: [3, 4, 5, 5]
Level 4: [7, 9, 1]
Level 5: [7, 1]
Level 6: [8]