我希望games在check()调用时更新,但是一旦“游戏+ = 1”运行,它就会创建一个新对象,而不是修改参数。但是我想修改这个论点,那我该怎么做呢?
现在wins,gamescheck()返回后重置为0
def check(...games, wins,...):
...
games += 1
wins += 1 if winner == 'agent' \
else 0 if winner == 'bot' \
else 0.5
...
return 1
return 0
def play_bot():
games = 0
wins = 0
...
if check(...games, wins,...): player = choice([0,1])
...
如果你想这样做的话,
你可以把函数的games = []
这样就可以了. 但是要考虑清楚作用域的问题哈.....
最简单的方法是简单地从check函数中返回所需的信息:
def check(node, winner):
if node:
return 1 if winner == 'agent' else 0 if winner == 'bot'
else 0.5
def play_bot():
games = 0
wins = 0
win = check(node, winner)
if win is not None:
games += 1
wins += win
player = choice([0,1])
如果你真的需要去OOP路由,你可以传递一个对象,check以便该函数可以根据需要修改它:
class Record:
def init(self):
self.games = self.wins = 0
def check(node, record, winner): if node:
record.games += 1
record.wins += 1 if winner == 'agent' else 0 if winner == 'bot' else 0.5
return True
return False def play_bot(): record = Record()
if check(node, record, winner):
player = choice([0,1])
第三种解决方案是使用全局变量,但我真的不建议这样做。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。