Blutiger Anfänger benötigt Hilfestellung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
deTTo
User
Beiträge: 7
Registriert: Freitag 22. Juni 2007, 20:04

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
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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

Code: Alles auswählen

schleife = weiter()
Vielleicht hilft dir das schonmal fürs erste.
Hab leider nicht mehr Zeit, bin nu feiern ;)
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

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 :D
deTTo
User
Beiträge: 7
Registriert: Freitag 22. Juni 2007, 20:04

Danke für die fixen Antworten!! 8)
Hab mal versucht was ihr mir vorgeschlagen habt, will aber noch nicht so recht laufen :roll: 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
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

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
deTTo
User
Beiträge: 7
Registriert: Freitag 22. Juni 2007, 20:04

Danke für eure Hilfe, habs nun hinbekommen! :D
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!! :)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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'
Antworten