Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Python] Rechnen mit "exec"? (https://www.delphipraxis.net/116233-%5Bpython%5D-rechnen-mit-exec.html)

cruso 25. Jun 2008 12:52


[Python] Rechnen mit "exec"?
 
Hi,

ich benutze um in einem Python-Programm Terme zu berechnen u.a. folgende Codezeilen:

Code:
erg=0
exec 'erg='+term
Das funktioniert auch alles Prima. Nur wenn z.B. "10**10*10*10" eingegeben wird, dann ist diese Codezeile überfordert. Wie kann ich das Problem umgehen? Also besser: Wie kann ich das ausrechnen bzw. sagen, dass diese (und andere dieser Art) Berechnung nicht ausführbar ist?


MfG
Cruso

Valle 25. Jun 2008 13:06

Re: [Python] Rechnen mit "exec"?
 
Was soll das heißen, "die Codezeile ist überfordert"?
Warum sollte man die nicht ausrechnen können? :gruebel:

Edit://

Code:
Python 2.4.4 (#2, Apr 16 2008, 17:58:59)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> erg = 0
>>> term = "10**10*10*10"
>>> exec 'erg='+term
>>> print erg
1000000000000
>>>
Mit freundlichen Grüßen,

Valle

cruso 25. Jun 2008 13:09

Re: [Python] Rechnen mit "exec"?
 
Zitat:

Zitat von Valle
Was soll das heißen, "die Codezeile ist überfordert"?
Warum sollte man die nicht ausrechnen können? :gruebel:

Mit freundlichen Grüßen,

Valle

Wenn du z.B. "10**10**10*10" mit der Codezeile berechnen lässt, dann wirst du sehen, dass das EWIG dauert! Ich möchte ja eigentlich nur wissen, wie man das umgehen kann, dass das Programm durch eine solche Eingabe so lange aufgehalten wird...

Valle 25. Jun 2008 13:13

Re: [Python] Rechnen mit "exec"?
 
:gruebel:

Code:
www-valle@ks360118:~$ time python -c "print 10**10*10*10"
1000000000000

real   0m0.007s
user   0m0.008s
sys    0m0.000s
www-valle@ks360118:~$
Dauert auf dieser Maschine 0.007 Sekunden.
Ist dir das zu langsam? :mrgreen:

Naja, ich hab verstanden was du meinst. Da wird dir wohl nichts anderes übrig bleiben, als deinem Programm das überschlagen beizubringen. Du könntest auch einen kleinen Workaround machen: Während das Programm rechnet in einem Thread die Zeit mitzählen und nach 2 Sekunden Rechenzeit dem Benutzer irgendeine Statusmeldung ausgeben... Überschlagen wäre zwar besser, aber ob man das dem Programm so einfach beibringen kann weiß ich nicht.

Edit:// Ey? Oben hast du noch 10**10*10*10 geschrieben, jetzt aber plötzlich 10**10***10... Das ist unfair. *g* Stimmt aber, diese Rechnung dauert zu lange... Überschlagen! *g*

Mit freundlichen Grüßen,

Valle

cruso 25. Jun 2008 14:46

Re: [Python] Rechnen mit "exec"?
 
Naja, ist es nicht möglich das über einen bestimmten Datentyp zu machen? Und sobald der Maximalwert überschritten ist gibt es einen Fehler und den kann ich dann verarbeiten.

Valle: Btw: Man kann doch mit nur 13 Zeilen eine Nachricht an einen IRC-Channel schicken ;)

Valle 25. Jun 2008 15:05

Re: [Python] Rechnen mit "exec"?
 
Zitat:

Zitat von cruso
Naja, ist es nicht möglich das über einen bestimmten Datentyp zu machen? Und sobald der Maximalwert überschritten ist gibt es einen Fehler und den kann ich dann verarbeiten.

Also spontan fällt mir da ein Modul namens decimal ein. Das hat glaube ich solche Features. Bin mir da aber nicht sicher, habe damit noch nicht wirklich gearbeitet.

Zitat:

Zitat von cruso
Valle: Btw: Man kann doch mit nur 13 Zeilen eine Nachricht an einen IRC-Channel schicken ;)

Schick mir die mal bitte per PM. :cyclops:

Mit freundlichen Grüßen,

Valle

cruso 25. Jun 2008 15:11

Re: [Python] Rechnen mit "exec"?
 
Immer diese Modul-Leute :mrgreen: ...
Ich wollte es eigentlich selbst machen. Und das mit dem Datentyp müsste gehen. In Delphi kann man ja auch nicht 10**10**10*10 mit Integer ausrechen :lol: ... Nur in Python weiß ich halt nicht wie das geht...

@Valle: Joa, vllt schick ich dir das... (hängt von der Beantwortung dieser Frage ab :zwinker: )


...

Valle 25. Jun 2008 15:19

Re: [Python] Rechnen mit "exec"?
 
Zitat:

Zitat von cruso
Immer diese Modul-Leute :mrgreen: ...
Ich wollte es eigentlich selbst machen. Und das mit dem Datentyp müsste gehen. In Delphi kann man ja auch nicht 10**10**10*10 mit Integer ausrechen :lol: ... Nur in Python weiß ich halt nicht wie das geht...

In Python gibt es diese strikten Datentypen nicht. Ich kenne für Zahlen lediglich "int" und "float". Und wie wir ja mittlerweile herausgefunden haben, versuchen diese Datentypen tatsächlich das auszurechnen. Also müssen wir wohl auf einen anderen umsteigen. Ich kenne aber eben keinen anderen, außer diese decimal-Klasse.

Du sagst (wenn auch auch Spaß), dass du diese Module nicht magst. (So meine Interpretation ;-) ) Das ist eigentlich keine schlimme Einstellung, verstößt allerdings ziemlich hart gegen das Python-Prinzip. DRY = Don't repeat yourself. Die Module sind dazu da, dass man sie verwendet. Und das decimal-Modul ist bei jeder Python-Installation bereits dabei, was hält dich also davon ab es zu verwenden?

Zitat:

Zitat von cruso
@Valle: Joa, vllt schick ich dir das... (hängt von der Beantwortung dieser Frage ab :zwinker: )

Das sag' ich meiner Mami. :mrgreen:

Mit freundlichen Grüßen,

Valle

Edit:// Leichte Verwirrung beseitigt...

cruso 25. Jun 2008 19:16

Re: [Python] Rechnen mit "exec"?
 
Ach, das ist schon dabei? Mhm, dass ist natürlich etwas anderes! :-D Dann werde ich das mal ausprobieren...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz