我编写的代码
tile1=0; player1=1; turn=player1
def s():
global tile1,turn,player1
print("Before",tile1)
string='tile' + '1' # I am getting 1 by some function that's why I need to create variable string
exec("%s=%d" %(string,turn))
print("After",tile1)
s()
输出我的预期
在0之前
1
输出我得到的内容
在0之前
0后
如果我在没有函数的情况下编写代码,它会给出预期的输出
tile1=0; player1=1; turn=player1
print("Before",tile1)
string='tile' + '1'
exec("%s=%d" %(string,turn))
print("After",tile1)
我想问一下如何纠正这段代码,以便获得预期的输出。另外,我不允许使用列表和字典。
答案 0 :(得分:3)
问题是您需要在函数内部使用exec
时指定范围。
如果您将其更改为:
exec("%s=%d" %(string,turn), None, globals())
它按预期工作,因为您没有local
个变量(您声明它们为global
),因此您将全局范围作为local
范围传递给exec
,因此它知道关于tile1
和turn
。
然而,这是误导exec
,你不应该这样使用它!