1

変数を含むいくつかの方程式を含む文字列があります。例えば:

eq='(a+1)*c-d'

また、変数の値を含む辞書があります。例えば:

val={'a':5,'c':'k','d':'300n'}

同じケースでわかるように、変数の値は他の変数になる可能性があり、場合によっては、eq のすべての変数が val になるわけではありません。

eq のすべての変数を val の値に置き換える必要があります。当然のことながら、単純なコードは次のようになります。

for v in val.keys():
  eq=re.sub(v,val[v],eq)

ただし、このコードは場合によっては失敗します。たとえば、変数リストに変数 "n" と "nn" がある場合

それで、誰かがより良い解決策を考えることができますか? ありがとうございました。

4

2 に答える 2

1

試す:

for k,v in val.items():
    eq = re.sub(r'\b' + k + r'\b', v, eq)

これは、変数を完全な名前で検索します。つまりval = {'x': '5'}、方程式に「xx」、「x2」、さらには「2x」などの部分文字列が含まれている場合、これらの文字列は置き換えられません。

于 2012-10-06T18:53:50.173 に答える
0

別のアプローチでは、式を少しだけ変更する必要があり、文字列関数「format」を使用します。

キーワード引数の使用 (あまりプログラム的ではありません):

>>> '({a}+1)*{c}-{d}'.format(a=5, c='k', d='300n')
'(5+1)*k-300n'

または代わりにdictを使用します:

>>> '({a}+1)*{c}-{d}'.format(**{'a': 5, 'c': 'k', 'd': '300n'})
'(5+1)*k-300n'

そうすることで、何かが置換されていないか、または置換されることを意図しているかをユーザーが識別するのに役立ち、コードがかなり簡素化されます。

于 2012-10-06T19:02:37.943 に答える