Hallo.
Bin derzeit Python-Anfänger, habe jedoch schon ein kleines Progrämmchen geschrieben (Projekt ruht schon etwas länger, vertiefe das Gelernte momentan eher).
Wie man der Readme entnehmen kann, ist das ganze natürlich noch nicht final, denn ich plane noch einige Funktionen sowie später eine GUI. (Ohne die sind Taschenrechner ja recht nutzlos. )
Kompiliert habe ich das Ganze diesmal allerdings nicht, da hier wohl jeder den Interpreter installiert hat.
Download
CalculateIt
Das Problem mit Taschenrechnern in Python ist, daß der interaktive Modus von Python selbst ein ganz guter Taschenrechner ist (wenn man immer nur float-Werte in den "print"-Anweisungen verwendet).
Gruß
Gruß
@Mugen: Die gegenseitige Rekursion zwischen `weiter()` und `main()` ist unsauber. Der Aufrufstack wächst bei jeder durchgeführten Operation weiter an.
`schleife` in `weiter()` ist sinnlos.
Das alle Aktionen doppelt aufgeführt werden, um Gross- und Kleinschreibung bei den Kommandos zu erlauben ist unschön. Insbesondere bei 'info' fasst man sich an den Kopf. Man könnte ja stattdessen die `eingabe` auch in Kleinbuchstaben umwandeln und braucht dann immer nur noch auf *eine* Schreibweise prüfen. Ein Dictionary, dass das Kommando auf die jeweilige Funktion abbildet, bietet sich hier an.
Die Operationen enthalten zu viele Wiederholungen. Wenn alle Operationen die Eingabe von zwei Zahlen verlangen, sollte man das *einmal* programmieren und nicht in jeder Operation erneut.
`schleife` in `weiter()` ist sinnlos.
Das alle Aktionen doppelt aufgeführt werden, um Gross- und Kleinschreibung bei den Kommandos zu erlauben ist unschön. Insbesondere bei 'info' fasst man sich an den Kopf. Man könnte ja stattdessen die `eingabe` auch in Kleinbuchstaben umwandeln und braucht dann immer nur noch auf *eine* Schreibweise prüfen. Ein Dictionary, dass das Kommando auf die jeweilige Funktion abbildet, bietet sich hier an.
Die Operationen enthalten zu viele Wiederholungen. Wenn alle Operationen die Eingabe von zwei Zahlen verlangen, sollte man das *einmal* programmieren und nicht in jeder Operation erneut.
- roschi
- User
- Beiträge: 225
- Registriert: Samstag 29. März 2008, 18:58
- Wohnort: Thueringen, Deutschland
- Kontaktdaten:
ich hab sowas auch schonmal gemacht.
(allerdings mit gui und ein paar mehr funktionen):
http://python-tools.ath.cx/tools/
das ding heißt 'MultiCalc'.
ist allerdings schon laenger her ->
der code ist vielleicht an manchen stellen etwas seltsam
ihr braucht hier dazu auch kein feedback zu geben. (ist ja schließlich nicht mein thread) ich kann aber gern dazu spaeter noch einen neuen eroeffnen.
vielleicht hilft es dir ja, Mugen.
mfg
roschi
EDIT:
das benoetigte modul 'mixed' gibts hier:
http://pypi.python.org/pypi/mixed/0.2.1
/EDIT
(allerdings mit gui und ein paar mehr funktionen):
http://python-tools.ath.cx/tools/
das ding heißt 'MultiCalc'.
ist allerdings schon laenger her ->
der code ist vielleicht an manchen stellen etwas seltsam
ihr braucht hier dazu auch kein feedback zu geben. (ist ja schließlich nicht mein thread) ich kann aber gern dazu spaeter noch einen neuen eroeffnen.
vielleicht hilft es dir ja, Mugen.
mfg
roschi
EDIT:
das benoetigte modul 'mixed' gibts hier:
http://pypi.python.org/pypi/mixed/0.2.1
/EDIT
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
So, hab' das Ganze etwas entrümpelt und nach Python 3 portiert.
http://paste.pocoo.org/show/131896/ - Hauptprogramm
http://paste.pocoo.org/show/131897/ - Modul mit den Funktionen
Kritik und Verbesserungsvorschläge sind natürlich erwünscht.
http://paste.pocoo.org/show/131896/ - Hauptprogramm
http://paste.pocoo.org/show/131897/ - Modul mit den Funktionen
Kritik und Verbesserungsvorschläge sind natürlich erwünscht.
Zu dem Lizenzvermerk: Eigentlich kommt das in jede Datei und eigentlich packt man das auch als Kommentar rein und nicht als Docstring. Der Docstring beschreibt das Modul / die Funktion / die Klasse.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Fuer deine if-/elif-Kaskade willst du eigentlich ein Dictionary.
Das ``_input`` in Zeile 58 will eigentlich ``choice`` heissen.
Generell: Bau dir lieber einen Parser fuer beliebigen Input. Das ist ja mehr Verwaltung als Taschenrechner.
Das ``_input`` in Zeile 58 will eigentlich ``choice`` heissen.
Generell: Bau dir lieber einen Parser fuer beliebigen Input. Das ist ja mehr Verwaltung als Taschenrechner.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@Mugen:
Und wenn ich (3+5)*9/(4-3) rechnen muß/will?
Bitte verstehe die Kritik nicht falsch, aber alles was Dein Programm macht, ist die Grundrechenarten mit netten "Hallo ich bins, die Addierfunktion"-Strings und der Aufforderung zur Zahleneingabe zu dekorieren. Ist nicht bös gemeint, nur der Sinn dahinter verschließt sich mir eben.
Und wenn ich (3+5)*9/(4-3) rechnen muß/will?
Bitte verstehe die Kritik nicht falsch, aber alles was Dein Programm macht, ist die Grundrechenarten mit netten "Hallo ich bins, die Addierfunktion"-Strings und der Aufforderung zur Zahleneingabe zu dekorieren. Ist nicht bös gemeint, nur der Sinn dahinter verschließt sich mir eben.
[Zitat meinerseits]jerch hat geschrieben:@Mugen:
Und wenn ich (3+5)*9/(4-3) rechnen muß/will?
Bitte verstehe die Kritik nicht falsch, aber alles was Dein Programm macht, ist die Grundrechenarten mit netten "Hallo ich bins, die Addierfunktion"-Strings und der Aufforderung zur Zahleneingabe zu dekorieren. Ist nicht bös gemeint, nur der Sinn dahinter verschließt sich mir eben.
Bin derzeit Python-Anfänger, habe jedoch schon ein kleines Progrämmchen geschrieben (Projekt ruht schon etwas länger, vertiefe das Gelernte momentan eher).
Das Programm soll nur mein Einstieg in die Programmierung sein und kein funktionales.
Wo wir schon dabei sind, versuche ich gerade die Methode von cofi umzusetzen.
Code: Alles auswählen
def rechne_mal_fuer_mich():
2 + 2
choices = {'Rechnen': rechne_mal_fuer_mich()}
choice = input('Gib Rechnen ein: ')
if choice in choices:
pass # hier soll er nun die eingabe überprüfen und dann eben die funktion aufrufen
else:
print('Die Eingabe ist falsch.')
Für Division mit Rest bietet sich die Built-in-Funktion divmod() an.
Die main-Funktion sollte man so aufrufen:MfG
HWK
Die main-Funktion sollte man so aufrufen:
Code: Alles auswählen
if __name__ == '__main__':
main()
HWK
Ja, trotzdem weiß ich nicht, wie ich den mit dem Schlüssel verbundenen Wert aufrufen kann (durch eine Eingabe des Benutzers - Bsp: addition (Schlüssel) ist im Dictionary mit der Funktion addition (Wert) verbunden, durch die Eingabe von addition soll diese Funktion dann aufgerufen werden usw.).
So:
Im Beispiel ist jetzt alles ohne Fehlerbehandlung, aber so in etwas sollte es aussehen. Wie du Funktionen mit mehr oder weniger als zwei Operanden umsetzt ist eine schöne neue Aufgabe.
Die Funktionen "addition" und "subtraction" kann man sich hier auch sparen, wenn man das "operator"-Modul verwendet.
Code: Alles auswählen
def addition(a, b):
return a+b
def subtraction(a, b):
return a+b
operators = {"addition":addition, "subtratkion":subtraction}
choice = input('Gib Rechnen ein: ')
operator = operators[choice]
a = input(...)
b = input(...)
print operator(a, b)
Die Funktionen "addition" und "subtraction" kann man sich hier auch sparen, wenn man das "operator"-Modul verwendet.
Das Leben ist wie ein Tennisball.
Danke erst einmal.
So sieht's derzeit aus.
http://paste.pocoo.org/show/131927/
http://paste.pocoo.org/show/131928/
Die Operationen funktionieren nun, allerdings nicht das Aufrufen von info().
Wenn ich info eintippe erhalte ich nur die übliche Aufforderung zur Eingabe der Zahlen.
So sieht's derzeit aus.
http://paste.pocoo.org/show/131927/
http://paste.pocoo.org/show/131928/
Die Operationen funktionieren nun, allerdings nicht das Aufrufen von info().
Wenn ich info eintippe erhalte ich nur die übliche Aufforderung zur Eingabe der Zahlen.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
So hast du das schliesslich auch geschrieben. Der Prompt kommt unabhaengig von der Wahl und info wird sowieso falsch aufgerufen - seltsam, dass du von dem ``TypeError`` nichts sagst
http://paste.pocoo.org/compare/131930/131928/
http://paste.pocoo.org/compare/131930/131928/
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Okay, jetzt klappt's. Vielen Dank.
Ich versuch mich dann mal daran, auch mehrere Zahlen eingeben zu können.
Hier übrigens der überarbeitete Code: http://paste.pocoo.org/show/131946/
http://paste.pocoo.org/show/131947/ (übrigens mit divmod - kann man die Ausgabe ebenfalls formatieren, damit die Klammern wegfallen?)
Ich versuch mich dann mal daran, auch mehrere Zahlen eingeben zu können.
Hier übrigens der überarbeitete Code: http://paste.pocoo.org/show/131946/
http://paste.pocoo.org/show/131947/ (übrigens mit divmod - kann man die Ausgabe ebenfalls formatieren, damit die Klammern wegfallen?)