Seite 1 von 1
Blutiger Anfänger benötigt Hilfestellung
Verfasst: Samstag 23. Juni 2007, 18:40
von deTTo
Heyho miteinander!
Ich versuche mich nun an Python und gehe Schritt für Schritt dies Onlinebuch hier durch:
http://abop-german.berlios.de Programmieren tue ich unter Linux.
Was mir lediglich fehlt sind mehr praktische Sachen, sprich Aufgabenstellungen und dergleichen. Hab mich deshalb erstmal an einen simplen Taschenrechner gewagt und folgendes ist bei rausgekommen:
Code: Alles auswählen
#!/usr/bin/python
def addition(a, b):
ergebnis = a + b
print 'Ergebnis von %s + %s = %s' % (a, b, ergebnis)
def subtraktion(a, b):
ergebnis = a - b
print 'Ergebnis von %s - %s = %s' % (a, b, ergebnis)
def multiplikation(a, b):
ergebnis = a * b
print 'Ergebnis von %s * %s = %s' % (a, b, ergebnis)
def division(a, b):
ergebnis = a / b
print 'Ergebnis von %s : %s = %s' % (a, b, ergebnis)
def weiter():
weiter = raw_input('Von vorn? (j/n) ')
if weiter == 'j':
main()
elif weiter == 'n':
print 'Bis bald.'
schleife = False
def main():
schleife = True
while schleife:
print 'Was moechtest du tun?'
auswahl = raw_input('(1) Addition (2) Subtraktion (3) Multiplikation (4) Division ')
print
zahl1 = float(raw_input('Erste Zahl: '))
zahl2 = float(raw_input('Zweite Zahl: '))
if auswahl == '1':
addition(zahl1, zahl2)
elif auswahl == '2':
subtraktion(zahl1, zahl2)
elif auswahl == '3':
multiplikation(zahl1, zahl2)
elif auswahl == '4':
division(zahl1, zahl2)
else:
print 'Bitte Auswahl korrigieren.'
print
weiter()
main()
Ich krieg's bloß nicht gebacken mit der Ja/Nein Abfrage. Das Programm startet egal was ich eingebe immer wieder neu, vermutlich an dem main() ganz unten. Hab dann mal das, was unter "def main():" steht als eigenständige Version gemacht, also bloß "def main():" entfernt und alles darunter eingerückt. Oberhalb bei der Abfrage dann natürlich noch "main()" weggemacht und stattdessen "schleife = True" hingesetzt. Aber letztendlich genau das selbe Ergebnis
Kann mir hier jemand weiterhelfen?
mfg,
deTTo
Verfasst: Samstag 23. Juni 2007, 19:00
von Zap
Hallo detto. Willkommen im Forum (Cool kann das auch mal sagen
)
Nur kurz überflogen liegt der Fehler daran das du dir den Wert von "schleife" aus der Methode weiter() nicht zurück geben lässt.
Es ist wichtig das man darüber Bescheid weiß, dass es in jeder Methode eine eigene Variable mit dem Namen "schleife" ( oder wie auch immer) geben kann die aber völlig unabhängig voneinander sind, da sie in unterschiedlichen "Namensbereichen" liegen.
Code: Alles auswählen
def weiter():
weiter = raw_input('Von vorn? (j/n) ')
if weiter == 'j':
main()
elif weiter == 'n':
print 'Bis bald.'
schleife = False
return schleife # gib Wert zurueck
In der main() müsste der Wert der zurück gegeben wird dann auch entgegen genommen werden
Vielleicht hilft dir das schonmal fürs erste.
Hab leider nicht mehr Zeit, bin nu feiern
Re: Blutiger Anfänger benötigt Hilfestellung
Verfasst: Samstag 23. Juni 2007, 19:01
von Gnushi
Probiere mal:
Code: Alles auswählen
...
def weiter():
eingabe = raw_input('Von vorn? (j/n) ')
weiter = False
if eingabe == 'j':
weiter = True
elif eingabe == 'n':
print 'Bis bald.'
return weiter
def main():
...
schleife = weiter()
Die Variable "schleife" in der Funktion "weiter()" und "main()" haben bei dir überhaupt nichts miteinander zu tun.
GnuShi
Edit: Da war wohl jemand schneller
Verfasst: Samstag 23. Juni 2007, 19:29
von deTTo
Danke für die fixen Antworten!!
Hab mal versucht was ihr mir vorgeschlagen habt, will aber noch nicht so recht laufen
Der in "main():" gesetzte Wert 'True' für 'schleife' muss noch irgendwie weg, woanders hin. Hab die Zeile deswegen mal ganz nach oben gehaun.
Code: Alles auswählen
#!/usr/bin/python
schleife = True
def addition(a, b):
ergebnis = a + b
print 'Ergebnis von %s + %s = %s' % (a, b, ergebnis)
def subtraktion(a, b):
ergebnis = a - b
print 'Ergebnis von %s - %s = %s' % (a, b, ergebnis)
def multiplikation(a, b):
ergebnis = a * b
print 'Ergebnis von %s * %s = %s' % (a, b, ergebnis)
def division(a, b):
ergebnis = a / b
print 'Ergebnis von %s : %s = %s' % (a, b, ergebnis)
def weiter():
weiter = False
eingabe = raw_input('Von vorn? (j/n) ')
if eingabe == 'j':
weiter = True
elif eingabe == 'n':
print 'Bis bald.'
return weiter
def main():
while schleife:
print 'Was moechtest du tun?'
auswahl = raw_input('(1) Addition (2) Subtraktion (3) Multiplikation (4) Division ')
print
zahl1 = float(raw_input('Erste Zahl: '))
zahl2 = float(raw_input('Zweite Zahl: '))
if auswahl == '1':
addition(zahl1, zahl2)
elif auswahl == '2':
subtraktion(zahl1, zahl2)
elif auswahl == '3':
multiplikation(zahl1, zahl2)
elif auswahl == '4':
division(zahl1, zahl2)
else:
print 'Bitte Auswahl korrigieren.'
print
weiter()
schleife = weiter()
main()
Nu isser am nörgeln
Code: Alles auswählen
detto@tan:~/python$ ./taschenrechner.py
Traceback (most recent call last):
File "./taschenrechner.py", line 48, in <module>
main()
File "./taschenrechner.py", line 28, in main
while schleife:
UnboundLocalError: local variable 'schleife' referenced before assignment
detto@tan:~/python$
..Habs mir jez vorm Posten nochmal 3 mal angeschaut und werd einfach nicht schlau draus wo der Fehler liegt .. :K
Verfasst: Samstag 23. Juni 2007, 19:39
von Gnushi
deTTo hat geschrieben:
Code: Alles auswählen
#!/usr/bin/python
def main():
...
weiter()
schleife = weiter()
Nu isser am nörgeln
Da steht auch 2-mal "weiter()" eines davon muss weg, und dann musste noch auf die Einrückung achten. Und die Globale Variable brauchst du auch nicht.
GnuShi
Verfasst: Samstag 23. Juni 2007, 20:41
von deTTo
Danke für eure Hilfe, habs nun hinbekommen!
Hier nun noch die vorläufige Endversion:
Code: Alles auswählen
#!/usr/bin/python
def addition(a, b):
ergebnis = a + b
print 'Ergebnis von %s + %s = %s' % (a, b, ergebnis)
def subtraktion(a, b):
ergebnis = a - b
print 'Ergebnis von %s - %s = %s' % (a, b, ergebnis)
def multiplikation(a, b):
ergebnis = a * b
print 'Ergebnis von %s * %s = %s' % (a, b, ergebnis)
def division(a, b):
ergebnis = a / b
print 'Ergebnis von %s : %s = %s' % (a, b, ergebnis)
def weiter():
weiter = False
eingabe = raw_input('Von vorn? (j/n) ')
if eingabe == 'j':
weiter = True
elif eingabe == 'n':
print 'Bis bald.'
return weiter
def main():
schleife = True
while schleife:
print 'Was moechtest du tun?'
auswahl = raw_input('(1) Addition (2) Subtraktion (3) Multiplikation (4) Division ')
print
zahl1 = float(raw_input('Erste Zahl: '))
zahl2 = float(raw_input('Zweite Zahl: '))
if auswahl == '1':
addition(zahl1, zahl2)
elif auswahl == '2':
subtraktion(zahl1, zahl2)
elif auswahl == '3':
multiplikation(zahl1, zahl2)
elif auswahl == '4':
division(zahl1, zahl2)
else:
print 'Bitte Auswahl korrigieren.'
print
schleife = weiter()
if __name__ == "__main__":
main()
Eine Fragn hätte ich allerdings noch. Bin mir da noch nicht ganz im Klaren drüber.
"schleife = weiter()" bedeutet ja, dass an dem Punkt die Funktion "weiter" ausgeführt wird, und das was
returned wird ist der neue Wert für "schleife".
Geht das auch wenn mehrere Variablen aus der Funktion "weiter" zurückgegeben werden?
Danke im vorraus und an alle die zuvor sich so flott gemeldet haben. 1a Forum!!
Verfasst: Sonntag 24. Juni 2007, 12:08
von Zap
Guten morgen
deTTo hat geschrieben:Eine Fragn hätte ich allerdings noch. Bin mir da noch nicht ganz im Klaren drüber.
"schleife = weiter()" bedeutet ja, dass an dem Punkt die Funktion "weiter" ausgeführt wird, und das was
returned wird ist der neue Wert für "schleife".
Geht das auch wenn mehrere Variablen aus der Funktion "weiter" zurückgegeben werden?
Danke im vorraus und an alle die zuvor sich so flott gemeldet haben. 1a Forum!!
Ja, in python geht das recht einfach, aber man sollte sich immer im voraus Gedanken darüber machen was man genau alles Methoden machen will und welche Rückgabewerte Sinn machen.
Man bekommt bei python ein Tupel zurück wenn man mehrere Variablen angibt.
Code: Alles auswählen
>>> def function():
... a = "foo"
... b = "bar"
... return a, b
...
>>> function()
('foo', 'bar')
>>> x, y = function()
>>> x
'foo'
>>> y
'bar'