Python--函数不返回值

新手上路,请多包涵

我想编写一个函数来比较两个值,val1 和 val2,如果 val1 大于 val2,则将 1 点添加到 a_points(将其视为团队 A),反之亦然(如果 val2 更大,则将 1 点添加到 b_points。 ) 如果这两个值是偶数,我不会向 a_points 或 b_points 添加任何点。

我的问题是 test_val 不会返回 a_points 或 b_points 的值。

 a_points=0
b_points=0

def test_val(a_points,b_points,val1,val2):
    if val1 > val2:
        a_points+=1
        return a_points
    elif val2 > val1:
        b_points+=1
        return b_points
    elif val1==val2:
         pass

[这是显示问题的可视化链接。](http://pythontutor.com/visualize.html#code=a0%3D5%0Aa1%3D6%0Aa2%3D7%0Ab0%3D3%0Ab1%3D6%0Ab2%3D10%0Aa_points%3D0%0Ab_points%3D0%0A%0Adef%20test_val(a_points,b_points,val1,val2%29%3A%0A%20%20%20%20if%20val1%20%3E%20val2%3A%0A%20%20%20%20%20%20%20%20a_points%2B%3D1%0A%20%20%20%20%20%20%20%20return%20a_points%0A%20%20%20%20elif%20val2%20%3E%20val1%3A%0A%20%20%20%20%20%20%20%20b_points%2B%3D1%0A%20%20%20%20%20%20%20%20return%20b_points%0A%20%20%20%20elif%20val1%3D%3Dval2%3A%0A%20%20%20%20%20%20%20%20pass%0A%0Atest_val(a_points,b_points,a0,b0%29%0Atest_val(a_points,b_points,a1,b1%29%0Atest_val(a_points,b_points,a2,b2%29%0A%0Aprint(a_points,b_points%29&cumulative=false&curInstr=13&heapPrimitives=false&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false)

原文由 Kristen Huber 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

考虑一下:

 a0=5
a1=6
a2=7
b0=3
b1=6
b2=10
a_points=0
b_points=0

def test_val(a_points, b_points, val1, val2):
    if val1 > val2:
        a_points += 1
        return (a_points, b_points)
    elif val2 > val1:
        b_points += 1
        return (a_points, b_points)
    elif val1==val2:
        return (a_points, b_points)

a_points, b_points = test_val(a_points,b_points, a0, b0)
a_points, b_points = test_val(a_points,b_points, a1, b1)
a_points, b_points = test_val(a_points,b_points, a2, b2)

print(a_points, b_points)

祝你好运!

原文由 opalczynski 发布,翻译遵循 CC BY-SA 3.0 许可协议

全局变量通常不是一个 好主意。除非你真的必须,否则不要使用它们。

实现这种计数器的正确方法是使用一个类。

 class MyCounter(object):

    def __init__(self):
        self.a_points = 0
        self.b_points = 0

    def test_val(self, val1, val2):
        if val1 > val2:
            self.a_points += 1
        elif val2 > val1:
            self.b_points += 1
        else:
            pass

counter = MyCounter()
counter.test_val(1, 2)
counter.test_val(1, 3)
counter.test_val(5, 3)
print(counter.a_points, counter.b_points)

输出:

 (1, 2)

请注意,从 test_val 返回一个值是没有意义的,因为调用者无法知道她是否得到 a_pointsb_points ,she can’以任何有意义的方式使用返回值。

原文由 alexanderlukanin13 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题