2012-05-26 82 views
0

這裏是我的代碼:的eval(功能)混淆

import random 
a=random.randrange(100,400) 
b=0 
c=100 
d=200 
e=300 
f=400 
g=500 
points =("b","c","d","e","f","g") 
randomadd=random.randrange(1,500) 
linepoints2=(b,305),(c,a),(d,305),(e,305),(f,a),(g,305),(g,300),(f,a+5),(e,300),(d,300),(c,a+5),(b,300) 
thingy=points[random.randrange(1,len(points))] 
eval(thingy) +=100 

我想對eval()啄,因爲我以爲它返回一個字符串,它會工作,但顯然你不能的eval()函數調用,我不知道如何解決這個請幫助...

+2

預期的輸出? –

回答

2

thingy不是函數,是一個字符串,所以你不能評估它,就好像它是一個函數。如果的功能,你會評估它像這樣:

eval("thingy()") 

你到底想幹什麼?代碼很混亂,也許你正在嘗試做其他事情,但是你做這件事的方式是錯誤的。

編輯:

現在很清楚你究竟想要做什麼,我可以建議你使用字典,這將作爲一個「變量」(有沒有必要EVAL什麼,這是不正確的方法來解決你的問題):

d = {} 
d[thingy] = 100 
d[thingy] += 200 
d[thingy] 
> 300 
+0

掛在...我知道這是一個字符串,但我想把它變成一個易變的名字,所以我可以改變任何出bcdefg的價值,但我似乎無法這樣做... – RPGer

+0

我編輯我的回答,看看它,我相信這就是你想要的第一個地方 –

+2

@RPGer請不要忘記接受對你最有幫助的答案(點擊左邊的複選標記),我已經注意到你從未在網站上接受任何答案,如果你不接受他們的答案,人們將不太可能幫助你。 –

1

錯誤,你想在這裏做什麼?

# bad 
eval(thingy) +=100 

這相當於:

# bad 
eval(thingy) = eval(thingy) + 100 

你不能分配給一個函數調用(我認爲這你得到的錯誤)。

你可以這樣做:

# good 
result = eval(thingy) + 100 

這似乎很好地工作(結果= 400)。

+0

耶!對於moronic python用戶(我....謝謝) – RPGer

+2

RPGer:如果這解決了你的問題,你總是可以點擊左邊的複選標記來接受它作爲正確的答案。 – Arka

+0

如何使用結果編輯其中一個原始變量... – RPGer

0

更好 - 完全避免使用eval()。嘗試

from random import randrange, choice 

points = (
    randrange(100,400), 
    0, 
    100, 
    200, 
    300, 
    400, 
    500 
) 

result = choice(points) + 100 
1

由於您的評論的一個建議,你想編輯原始變量,那麼試試這個,而不是eval()

vars()[thingy]+=100 

ZyX建議使用locals()

locals()[thingy]+=100 
+0

我很驚訝,只有四個答案中的一個提到了這一點,儘管我寧願在這裏使用'locals()':它對於沒有參數的'vars()'是完全等價的。沒有冒犯性:我只是不知道'vars()'。 – ZyX

+0

謝謝我從來不知道'locals()',並且我使用了'vars()'而沒有參數(作爲字典)。 –