2017-09-23 54 views
1

代碼我寫exec函數不是蟒蛇正常工作3.6

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

如果我寫的代碼沒有的功能,它提供了預期的輸出

tile1=0; player1=1; turn=player1 
print("Before",tile1) 
string='tile' + '1'         
exec("%s=%d" %(string,turn)) 
print("After",tile1) 

我想問如何讓我得到預期的輸出更正此代碼。另外,我不允許使用列表和字典。

+0

你必須打印「字符串」,因爲這是現在「title1」 –

+0

你能解釋與代碼,因爲我不理解你的答案 –

回答

1

問題是,當您在函數內使用exec時,需要指定範圍。

如果將其更改爲:

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

它按預期工作,因爲你沒有local變量(你宣佈他們global),所以你在全球範圍內通過爲local範圍exec所以它知道tile1turn


但是,這是濫用exec,你不應該那樣使用它!