0

这是我的代码:

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() 一个函数调用,我不知道如何解决这个问题请帮助......

4

4 回答 4

2

thingy不是一个函数,是一个字符串,所以你不能像函数一样评估它。如果它一个函数,你会像这样评估它:

eval("thingy()")

你想做什么?代码令人困惑,也许您正在尝试做其他事情,但您做事的方式是错误的。

编辑 :

现在很清楚您打算做什么,我可以建议您使用字典,它将作为“变量”工作(无需评估任何内容,这不是解决问题的正确方法):

d = {}
d[thingy] = 100
d[thingy] += 200
d[thingy]
> 300
于 2012-05-26T20:35:01.317 回答
1

呃,你想在这里做什么?

# bad
eval(thingy) +=100

这转化为:

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

而且您不能分配给函数调用(我认为是您遇到的错误)。

您可以执行以下操作:

# good
result = eval(thingy) + 100

这似乎工作得很好(结果= 400)。

于 2012-05-26T20:38:44.957 回答
1

正如您的评论之一建议您要编辑原始变量,所以试试这个而不是eval()

vars()[thingy]+=100

或者按照ZyX 的建议使用locals()

locals()[thingy]+=100
于 2012-05-26T20:51:03.240 回答
0

更好的是 - 完全避免 eval() 。尝试

from random import randrange, choice

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

result = choice(points) + 100
于 2012-05-26T20:44:56.440 回答