我想编写一个函数来比较两个值val1和val2,如果val1大于val2,则向a_points添加1个点(将其想象为Team A),反之亦然(如果val2,则向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
答案 0 :(得分: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)
祝你好运!
答案 1 :(得分:1)
这将简化您的代码和逻辑。并使它工作; - )
var serveraddress = "http://" + server + "/token"/*"/Account/LoginMobile"*/;
doLogin(): void {
var username = $("#username").val();
var password = $("#password").val();
var server = $("#server").val();
//TODO do validation
var serveraddress = "http://" + server + "/token"/*"/Account/LoginMobile"*/;
ApiHelper.post(serveraddress, { username: username, password: password, client_id: "VoltPMS.Mobile", client_secret: "voltrun", grant_type: "password" })
.done((data) => {
Volt.App.clearLoading();
if (data) {
if (data.access_token) {
SessionManager.setSessionItem("loginstatus", "true");
SessionManager.setSessionItem("username", username);
//SessionManager.setSessionItem("server", server);
SessionManager.setSessionItem("access_token", data.access_token);
SessionManager.setSessionItem("refresh_token", data.refresh_token);
$("#username").val("");
$("#password").val("");
//$("#server").val("");
Volt.Navigation.navigate("Home", "Home");
} else {
//TODO Login Error
}
} else {
//TODO Login ERROR
}
}).error((er) => {
Volt.App.clearLoading();
});
答案 2 :(得分:1)
全局变量通常是坏主意。除非你真的需要,否则不要使用它们。
实现此类计数器的正确方法是使用类。
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_points
或b_points
,因此她无法使用返回值以任何有意义的方式。
答案 3 :(得分:0)
a_points=0
b_points=0
def test_val(a_points,b_points,val1,val2):
global a_points
global b_points
if val1 > val2:
a_points+=1
return a_points
elif val2 > val1:
b_points+=1
return b_points
elif val1==val2:
# If you pass, it won't return a_points nor b_points
return a_points # or b_points
答案 4 :(得分:0)
print (test_val(a_points,b_points,1,2))
print (test_val(a_points,b_points,2,1))
print (test_val(a_points,b_points,2,2))
这会给你一个结果:
1
1
None
因此,您不应该查看函数来返回值,而是更新变量a_points和b_points的值。这就是为什么在您共享代码的链接中包含最后的print(a_points,b_points)
语句
答案 5 :(得分:0)
你的问题是Python整数是不可变的,一般来说这是很好的阅读。可以找到更多详细信息here。
现在,关于解决方案:
根据建议,您可以使用global
个变量。请记住,这通常被视为不良做法,因为它会导致代码混乱......但global
在编程中占有一席之地。
同时建议您随时返回a_points
和b_points
使用list
来保持分数:
test_val
将返回0,1或2,其中0表示相等,1表示第一个参数较大,2表示第二个参数较大。代码:
a0=5
a1=6
a2=7
b0=3
b1=6
b2=10
points=[0, 0, 0]
def test_val(val1,val2):
if val1 > val2:
return 1
elif val2 > val1:
return 2
elif val1==val2:
return 0
points[test_val(a0,b0)] += 1
points[test_val(a1,b1)] += 1
points[test_val(a2,b2)] += 1
print("eq=%d, A=%d, B=%d" % (points[0], points[1], points[2]))
输出(visualize)
eq=1, A=1, B=1
希望有所帮助
答案 6 :(得分:-2)
请注意,a_points
和b_points
会影响您的全局变量,因为它们也会作为参数传递。
任何方式,在平等的情况下,您不返回值,而不是pass
,返回值
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:
return a_points