我正在创建一个在终端上播放的游戏,我想通过使用函数来减少重复代码的数量,例如
def p1_end_turn(p1_turn, p2_turn):
p1_turn = False
p2_turn= True
return p1_turn, p2_turn
但是,当运行代码为p1_end_turn(p1_turn, p2_turn)
的程序时,变量p1_turn和p2_turn没有改变。我怎样才能使这段代码正确地返回变量(我使用python3.9.1,并已检查该函数是否正常工作)
返回变量不会改变变量的值。我想读读这页关于变量作用域和不可变变量和可变变量的内容会很有帮助。
正如在第二个链接中提到的,布尔变量是不可变的对象。
如果你真的想坚持你当前的代码(我强烈建议你先阅读链接,然后决定怎么做!),你可以使用这样的东西来改变回合:
def change_trun(p1_turn, p2_turn):
return not p1_turn, not p2_turn
# some codes
p1_turn, p2_turn = change_turn(p1_turn, p2_turn)
最后一行是关键。变量应该用返回值更新。
看一下变量作用域(可能还有可变/不可变对象)。简而言之,你只改变函数内部的p1_turn
和p2_turn
。这意味着函数外的值保持不变。
函数中的变量与函数外的变量不一样。因此,您必须将输出存储在您想要的变量中。
def p1_end_turn(p1_turn, p2_turn):
p1_turn = False
p2_turn= True
return p1_turn, p2_turn
P1_turn = True
P2_turn = True
P1_turn, P2_turn = p1_end_turn(P1_turn, P2_turn)