3

我写的代码

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)

我想问如何更正此代码,以便获得预期的输出。另外,我不允许使用列表和字典。

4

1 回答 1

3

exec问题是在函数内部使用时需要指定范围。

如果您将其更改为:

exec("%s=%d" %(string,turn), None, globals())

它按预期工作,因为您没有local变量(您声明了它们global),因此您将全局范围作为local范围传递给它,exec因此它知道tile1and turn


但是,它是滥用exec,你不应该那样使用它!

于 2017-09-23T13:28:18.577 回答