python中while循环的问题

python中while循环的问题,python,variable-alias,Python,Variable Alias,我无法理解为什么在下面的程序中会出现while循环 始终在1次迭代后停止。基本上,权重以前是如何形成的 等于一次迭代后的权重,与输入无关。基本上我想要 跟踪连续两次跑步的重量列表,以及它们是否相等 我想退出。如果使用具有固定大量迭代次数的for循环,我会看到 连续的权重列表在第一次迭代中并不相等,但while循环始终 一点以后就辞职。任何帮助都将不胜感激 import random def test(inputs, targets): inputDim = len(inputs[0])

我无法理解为什么在下面的程序中会出现while循环 始终在1次迭代后停止。基本上,权重以前是如何形成的 等于一次迭代后的权重,与输入无关。基本上我想要 跟踪连续两次跑步的重量列表,以及它们是否相等 我想退出。如果使用具有固定大量迭代次数的for循环,我会看到 连续的权重列表在第一次迭代中并不相等,但while循环始终 一点以后就辞职。任何帮助都将不胜感激

import random

def test(inputs, targets):
    inputDim = len(inputs[0])
    outputDim = len(targets[0])
    if (len(inputs) == len(targets)):
        dataSize = len(inputs)
    else:
        return

    weights = [];

    for i in range(inputDim + 1):
        weights.append([]);
        for j in range(outputDim):
            weights[i].append(2*random.random() - 1);

    weightsPrevious = 0

    iterCount = 0
    while (weightsPrevious != weights):
        iterCount += 1
        print("iteration", iterCount)
        weightsPrevious = weights.copy()
        for k in range(dataSize):
            for j in range(outputDim):
                weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
                for i in range(inputDim):
                    weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]

        return weights

test([[0,0],[0,1],[1,0],[1,1]],[[0],[1],[1],[1]])
编辑:即使删除最后一条return语句,我也会得到相同的结果

while (weightsPrevious != weights):
    iterCount += 1
    print("iteration", iterCount)
    weightsPrevious = weights.copy()
    for k in range(dataSize):
        for j in range(outputDim):
            weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
            for i in range(inputDim):
                weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]

    return weights
应该是

while (weightsPrevious != weights):
    iterCount += 1
    print("iteration", iterCount)
    weightsPrevious = weights.copy()
    for k in range(dataSize):
        for j in range(outputDim):
            weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
            for i in range(inputDim):
                weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]

return weights
注意返回上的缩进

应该是

while (weightsPrevious != weights):
    iterCount += 1
    print("iteration", iterCount)
    weightsPrevious = weights.copy()
    for k in range(dataSize):
        for j in range(outputDim):
            weights[0][j] += 0.25*(targets[k][j] - 1)*(-1)
            for i in range(inputDim):
                weights[i + 1][j] += 0.25*(targets[k][j] - 1)*inputs[k][i]

return weights

注意返回的缩进,这是因为在while循环的末尾有一个
返回<代码>返回
停止函数的执行并返回权重

我认为你需要取消它:

while (weightsPrevious != weights):
    iterCount += 1
    print("iteration", iterCount)
    ...

return weights # now this is going to be executed when 
               # the while loop is finished.

这是因为在while循环的末尾有一个
返回<代码>返回
停止函数的执行并返回权重

我认为你需要取消它:

while (weightsPrevious != weights):
    iterCount += 1
    print("iteration", iterCount)
    ...

return weights # now this is going to be executed when 
               # the while loop is finished.

这正是我的测试文件中所包含的内容,不知道为什么它会以这种方式复制粘贴。但它似乎仍然不起作用。我只是尝试完全删除return语句,但程序在一次之后仍然停止iteration@BM一个原因可能是这一行:
weightsPrevious=weights.copy()
,因此,
weightsPrevious
在第一次迭代后变得等于
weights
,将在第二次迭代之前退出。是的,似乎是这样。我在Python可视化工具中运行了代码,看起来虽然创建了不同的列表,但列表中的条目指向相同的值。我尝试使用列表(权重)来代替,但这也做了同样的事情。似乎我需要找到一种新的复制方式。感谢您的回复和支持comments@BM我昨天详细解释了这件事,你可能会发现它很有用:这就是我的测试文件中的内容,不知道为什么它会以这种方式复制粘贴。但它似乎仍然不起作用。我只是尝试完全删除return语句,但程序在一次之后仍然停止iteration@BM一个原因可能是这一行:
weightsPrevious=weights.copy()
,因此,
weightsPrevious
在第一次迭代后变得等于
weights
,将在第二次迭代之前退出。是的,似乎是这样。我在Python可视化工具中运行了代码,看起来虽然创建了不同的列表,但列表中的条目指向相同的值。我尝试使用列表(权重)来代替,但这也做了同样的事情。似乎我需要找到一种新的复制方式。感谢您的回复和支持comments@BM我昨天详细解释了这件事,你可能会发现它很有用:我在python中以这种方式缩进了它,但仍然得到了相同的结果。我删除了那一行,并再次将缩进与while语句对齐,只是为了确保这一点,但我仍然得到了相同的结果。我只是尝试完全删除return语句,程序在一次迭代后仍然停止。我在python中以这种方式缩进了它,我仍然得到了相同的结果。我删除了那一行,并再次将缩进与while语句对齐,只是为了确保,但我仍然得到相同的结果。我只是尝试完全删除return语句,程序在一次迭代后仍然停止