【发布时间】:2022-01-15 20:55:59
【问题描述】:
为了练习起见,我正在尝试计算以下数学表达式:
参数中的 x 值应该是一个数字 - 一个 int 或 float 参数中的 y 值应该是一个数字列表。
该函数应该返回一个与参数中的列表 y 长度相同的值列表。
出于某种尴尬的原因,我只设法让函数只返回一个列表元素,它来自函数中两个方程中的第一个。
有问题的代码是:
def f(x ,y):
list = []
for i in y:
if y[i] <= 0:
list.append(4 * (x ** 3) * y[i] - 2 * x * y[i])
if y[i] > 0:
list.append(4 * (x ** 3) * y[i] + 2 * x * y[i])
return list
x_value = 2
y_values = [1,-2, 3, -7]
print(f(x_value, y_values))
#wanted output: [28, -56, 85, -252]
#actual output: [-56]
我的问题是:
- 如何让这个函数返回一个包含所有计算的列表?比如像
[28, -56, 85, -252]而不是当前输出[-56]
这可能是一个简单的修复,但由于某种原因我被卡住了。
有没有好心人帮我解决这个问题?
【问题讨论】:
-
将
return移动到与list = []相同的缩进左侧 -
并且不要使用
list作为名称,它是内置类型。 -
@Brown Bear:这是我的第一个想法,但由于某种原因,它给了我一条错误消息,指出索引超出范围。
-
@buran:谢谢,我知道,但这只是为了翻译目的。
-
强烈强调不要使用
list作为变量名。list已经是 python 中内置类型list的名称。重用内置的名称来命名其他东西不仅令人困惑,而且还会产生意想不到的副作用。想象一下,如果我通过一项法律,“房子”现在是我自己房子的专有名称。突然之间,每一个使用“房子”这个词的法律合同现在都指的是我的房子。我给自己带来了很多麻烦!在其他编程语言中这不是什么大问题,但是“python 的名称是动态的,没有作用域的”,这意味着重命名会影响一切。
标签: python list function for-loop math