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

コメントの1つが元の変数を編集したいことを示唆しているので、次の代わりにこれを試してくださいeval()

vars()[thingy]+=100

またはZyXが提案した使用法としてlocals()

locals()[thingy]+=100
于 2012-05-26T20:51:03.240 に答える
1

えっと、ここで何をしようとしていますか?

# bad
eval(thingy) +=100

つまり、次のようになります。

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

また、関数呼び出しに代入することはできません (それがエラーだったと思います)。

次のようなことができます:

# good
result = eval(thingy) + 100

これは完全に機能しているようです (結果 = 400)。

于 2012-05-26T20:38:44.957 に答える
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 に答える