我需要使用函数作为范围,但是出现错误,表示未设置n: NameError:名称'n'未定义
我实际上是在学习如何使用python,我不知道语法是否正确,我只是找到列表的例子作为范围。
有人可以清楚我的想法,给我一些建议吗?
[EDIT1]我的函数z取决于j和f(n)。
[EDIT2]我的斐波纳契范围是整合在一个球体上的。
程序是这样的:
def f(n):
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a
def y(n):
return f(n) + some_const
def z(j):
for j in range(0,f(n-1)):
return j*y(n) + j*f(n-1) + j*f(n)
答案 0 :(得分:1)
你有
def z(j):
for j in range(0,f(n-1)):
return j*y(n) + j*f(n-1) + j*f(n)
请注意,您说这需要j
,而其他功能需要n
。
你的意思是
def z(n):
for j in range(0,f(n-1)):
return j*y(n) + j*f(n-1) + j*f(n)
当您收到错误时,请检查它所引用的行号。 另外,考虑给你的变量longers名字 - 只是单个字母容易混淆!
正如评论所指出的那样,一旦停止提供错误消息,它可能无法执行您想要的操作。 首先是函数循环,然后返回:
def f(n):
a = something
for i in range(n):
a = a + i
return a
(我认为something
设置为,呃,某事)
你的z
函数一进入循环就会返回:也许你只是想收集结果并返回它们?
def z(n):
stuff = []
for j in range(0,f(n-1)):
stuff.append( j*y(n) + j*f(n-1) + j*f(n) )
return stuff
请注意,返回进一步离开 - 不再在for
循环内缩进。
实际上你可以使用列表理解:
def z(n):
return [j*y(n) + j*f(n-1) + j*f(n) for j in range(0,f(n-1))]
答案 1 :(得分:0)
您发布的代码段有几个问题。
如果包含调用函数的代码,将会有所帮助。你似乎也应该在Python中查看vars的本地范围 - 你调用传递给函数的参数并不重要,所以你可以在括号中调用var" n"对于每个函数,但最好给它们一个有意义的名称来指示该参数代表什么 - 对于其他查看代码的人来说非常有用,以及良好的实践!
最后,在函数内部使用docstring可以非常清楚函数的功能,并且可能包含一个desc。通过的参数(类型/类)。
def range_sum(n): # instead of f- range_sum seems appropriate
"""
Sums the range of numbers from 0 to n
>>> range_sum(4) # example data
10
"""
# no idea what a is meant to be, unless an accumulator to
# store the total, in which case it must be initialised
accum = 0
for i in range(1, n+1): #iterates from 1 to n
accum = aaccum + i
return a # returns the total
def y(m, const): # use a descriptive func name
"""
Sums the range of numbers from 0 to m and adds const
>>> y(4, 7) # example data
17
"""
return range_sum(m) + const
def z(j, n, m): # pass all the vars you need for the function so they have a value
"""
Something descriptive
>>> z(4, 2, 5) # example data
?
"""
total
for j in range(0,f(n-1)):
total += j*y(m) + j*f(n-1) + j*f(n)
return total
print("First Func, ", range_sum(4))
print("Second Func, ", y(4, 7))
print("Third Func, ", z(4, 2, 5))
请注意,传递给每个函数的参数数量与函数预期的数量相匹配。可以设置默认值,但首先要做到这一点。
不确定最后一个函数是做什么的,但正如上面的注释中所提到的,显示一些代码来说明如何调用代码可能很有用,如示例所示。