调用函数不在python中返回值

时间:2015-04-29 03:16:05

标签: python

我对python和编码一般都比较新。 我已经搜索了一些其他类似的问题,似乎无法找到我正在寻找的答案。 我正在研究一个能够计算篮球运动员进攻效率的小程序,但是当我定义一个程序并将其调回来时,它不会产生价值。

def fgp(x, y):
    fgp = (x/y)*100
    return;

def fgpoutput():
    x = int(input("How many shots made?"));
    y = int(input("How many shots attempted?")); 
    fgp(x, y);
    output = "This player is shooting",fgp,"%"
    print(output)


fgpoutput()

我认为这似乎有效,但我无法分辨,因为它会返回:

How many shots made?5
How many shots attempted?10
('This player is shooting', function fgp at 0x02561858, '%')

我觉得我已经接近了,但似乎无法确定它。

4 个答案:

答案 0 :(得分:1)

output = "This player is shooting",fgp,"%"正在打印“fgp”函数本身,而不是它正在计算的内容。您可能正在寻找的是:

def fgp(x, y):
    return (x / y) * 100

这将返回您想要计算的值。然后你可以在输出中调用它:

def fgpoutput():
    x = int(input("How many shots made?"))
    y = int(input("How many shots attempted?"))
    result = fgp(x, y)
    output = "This player is shooting {} %".format(result)
    print(output)

此外,您不需要Python末尾的分号。

答案 1 :(得分:1)

好的,你在这里遇到了一些不同的问题。

  1. 您不会从function fgp返回任何内容:return;末尾的fgp返回None,这在Python中表示没有值。不要那样!相反,请使用:return fgp
  2. 您没有在fgp中调用fgpoutput - 您只是打印功能本身。相反,您希望调用这样的函数:fgp(x, y),现在返回计算值。
  3. 他们构建output的方式并不完全正确。在Python中,有一种字符串方法,用于格式化字符串以包含数字:str.format()Check out the documentation on it here
  4. 所以,我们总得到:

    def fgp(x, y):
        fgp = (x/y)*100
        return fgp
    
    def fgpoutput():
        x = int(input("How many shots made?"));
        y = int(input("How many shots attempted?")); 
        output = "This player is shooting {} %".format(fgp(x, y))
        print(output)
    
    
    fgpoutput()
    

    总的来说,你肯定是在正确的轨道上。祝你好运!

答案 2 :(得分:0)

与Python中的其他内容一样,函数是一个对象。打印fgp时,您正在打印对可执行功能对象的引用。

但是,与Matlab不同,要从Python中的函数返回,实际上你需要return值:

def fgp(x, y):
    return (x/y) * 100

如果您想致电fgp,您必须执行此操作:

output = "This player is shooting", fgp(x, y), "%"

答案 3 :(得分:0)

似乎存在一些问题

首先是函数 -

def fgp(x, y):
    fgp = (x/y) * 100
    return;

在上面的函数中,您正在使用' fgp'再次进入函数' fgp'。这本身不是问题(函数fgp是全局的,而函数fgp中的fgp是本地的),但它非常难以理解和混淆。你应该使用像' f'如果你必须的话。

第二 -

(x/y) * 100

此函数几乎总是返回0(如果x和y都是整数,在你的情况下它们是和x

(x * 100.0) / y # force the numerator to a float

所以你的fgp变成了

def fgp(x,y):
    assert y is not 0
    return (x * 100.0/y) 

如果y恰好为零,则让它AssertionError。这应该是