Python代码问题咨询:为何无法计算正确的向量模长?
问题诊断与修复方案
首先,我大概率能猜到你的代码犯了Python新手常遇到的循环变量覆盖问题——毕竟返回向量最后一个值而非模长,这个现象太典型了。
先举个和你的情况八九不离十的错误代码例子:
def calculate_magnitude(vector): sum_of_squares = 0 for num in vector: sum_of_squares = num ** 2 # 这里是赋值,不是累加! return sum_of_squares ** 0.5
问题根源
你在循环里把sum_of_squares反复重新赋值为当前元素的平方,而不是在之前的结果上累加。循环结束后,sum_of_squares只会保存最后一个元素的平方,开根号后自然就是最后一个元素的绝对值,看起来就像直接返回了向量的最后一个值。
修复后的正确代码
只需要把赋值操作改成累加即可:
def calculate_magnitude(vector): sum_of_squares = 0 for num in vector: sum_of_squares += num ** 2 # 用+=实现累加,而非直接赋值 return sum_of_squares ** 0.5
如果你想更Pythonic一点,甚至可以用一行代码搞定:
def calculate_magnitude(vector): return sum(num ** 2 for num in vector) ** 0.5
测试一下:比如传入向量[3,4],正确模长是5,修复后的代码会返回预期结果,而不是4啦。
内容的提问来源于stack exchange,提问作者Foram
相关产品推荐
相关产品推荐

