J'ai une chaîne Si j'effectue str1 = "2 * pi" code> où pi est une chaîne globale pi = "1 * pi" code> p> p> p> P>
eval (str1) code> il essaie d'évaluer 1. * PI1. * PI code>. Comment puis-je l'évaluer comme 2 * (1 * pi) code> i.e 2 pi? P>
3 Réponses :
Formatez la chaîne directement dans 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. STR1 code>. p> import re
eval(re.sub(r'\bPI\b', PI, str1))
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 code> et STR1 code> 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)) code> devrait faire le tour.
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
Merci d'être évalué d'abord semble avoir résolu le problème.
donc j'ai maintenant p> qui évitait tout besoin d'un remplacement p> p>
Pourquoi utilisez-vous des chaînes pour définir des chiffres? Il suffit d'utiliser
math.pi code>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