0
votes

Évaluation des chaînes

J'ai une chaîne str1 = "2 * pi" où pi est une chaîne globale pi = "1 * pi"

Si j'effectue eval (str1) il essaie d'évaluer 1. * PI1. * PI . Comment puis-je l'évaluer comme 2 * (1 * pi) i.e 2 pi?


4 commentaires

Pourquoi utilisez-vous des chaînes pour définir des chiffres? Il suffit d'utiliser math.pi


Je soupçonne que cette question pourrait souffrir de le problème XY , pouvez-vous fournir plus de contexte? Qu'essayez-vous d'atteindre?


J'essaie de traiter un fichier GDML avec Python. Le fichier GDML définit PI en tant que "1 * pi" constant et à un autre point fait référence à une variable comme 2 * pi


Et si vous évaluez - eval () - la chaîne PI d'abord et l'a inséré l'évaluée à STR1 en tant que STR à travers la commande STR () puis évaluée STR1


3 Réponses :


3
votes

eval (str1) code> renvoie 1. * PI1. * PI code> car eval (STR1) code> évalue vers 2 * "1 * PI " code> et la multiplication entre une chaîne et un entier entraîne une répétition de la chaîne.

Formatez la chaîne directement dans STR1 code>. p>

import re
eval(re.sub(r'\bPI\b', PI, str1))


4 commentaires

Le problème est que je ne suis pas en contrôle de STR1, il est défini comme 2 * PI dans le fichier GDML.


@Keith Juste pour clarifier: PI et STR1 sont définis dans un fichier séparé et en dehors de votre contrôle?


Oui, ils sont définis dans un fichier GDML que j'essaie de traiter. Ils pourraient être définis comme plus ou moins n'importe quoi


@Keith ok merci; Je pense que eval (re7 (r '\ bpi \ b', pi, str1)) devrait faire le tour.



2
votes

Et si vous évaluez - Evaluated - eval () - la chaîne PI d'abord et l'a inséré l'évaluée à STR1 en tant que STR via la commande STR () puis évalué STR1

6.283185307179586


0 commentaires

1
votes

Merci d'être évalué d'abord semble avoir résolu le problème.

donc j'ai maintenant xxx

qui évitait tout besoin d'un remplacement


0 commentaires