如何编写作为范围的函数?

时间:2017-09-01 18:20:33

标签: python function range

我需要使用函数作为范围,但是出现错误,表示未设置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)

2 个答案:

答案 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))

请注意,传递给每个函数的参数数量与函数预期的数量相匹配。可以设置默认值,但首先要做到这一点。

不确定最后一个函数是做什么的,但正如上面的注释中所提到的,显示一些代码来说明如何调用代码可能很有用,如示例所示。