随机游走 Python 运动循环

Random walk Python exercise loop

我正在做python运动,我做不完。我需要创建一个数组并填充它 25 个数字,每个数字都是前一个数字和从集合 (-5, 5) 中得出的值的总和。

将 numpy 导入为 np 随机导入

def prog_list(mylist):
    mylist = [0]
    addlist = [-5,5]
    sum_list = 0
    for i in mylist:
        if len(mylist) < 25:
            sum_list = random.choice(addlist) + mylist[i-1]
            mylist.append(sum_list)
        else:
            return mylist
        
for x in prog_list(mylist):
    print(x)

当我打印 x 时,我得到了

IndexError: list index out of range
for i in mylist:
    if len(mylist) < 100:
        sum_list = random.choice(addlist) + mylist[i-1]
        mylist.append(sum_list)
    else:
        return mylist

此构造将 mylist 的元素值设为 i。第一个元素是 0 所以你得到 {-5,5} + mylist[-1] 之一([-1] 表示 python 语言中的最后一个元素),这导致 -55,那么你得到的值减去 1,即 -64,但没有足够的元素来获得 -6(即从右边开始的 6)或 4(即左起第 5 个)元素,因此 IndexError。为避免您可能会使用以下 while

替换 for
while len(mylist) < 100:
    sum_list = random.choice(addlist) + mylist[-1]
    mylist.append(sum_list)
return mylist
for i in mylist

遍历列表中的项目,因此在加减 5 时的第一步,您将尝试使用 mylist 访问第 (5 - 1) 个或第 (-5 - 1) 个元素[i - 1],这会给你一个 IndexError。

要获取 mylist 的当前最后一个元素,您应该使用

mylist[-1] instead of mylist[i - 1]

这个有效:

def prog_list(n):
    mylist = [0]
    #addlist = [-5,5]
    addlist = list(range(-5, 5+1))
    for i in range(1, n):
        _sum = random.choice(addlist) + mylist[i-1]
        mylist.append(_sum)
    return mylist

prog_list(25)

如果你想从 (-5, 5) 中提取任何整数,你需要这个: addlist = list(range(-5, 5+1))

有一种更简洁的方法,您无需在每次迭代中访问列表:

def prog_list(n):
    mylist = []
    _sum = 0
    #addlist = [-5,5]
    addlist = list(range(-5, 5+1))
    for i in range(n):
        mylist.append(_sum)
        _sum += random.choice(addlist)
    return mylist
        
prog_list(25)