Eine Fehlermeldung die ich nicht verstehe

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
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Sorry ich wollt das eigentlich als code erscheine lassen!

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import pdb
class Bruch  ():
	Nenner= 1
	Zaehler = 1
	pdb.set_trace()
	def set_Zaehler (self):
			self.Zaehler =  int(raw_input("Bitte geben Sie den   Zaehler ein; "))
			return zaehler
	
	def set_Nenner(self) :
		nenner = 0
		while nenner ==0 :
			nenner = int(raw_input("Bitte geben Sie den Nenner ein: "))
			if nenner == 0:
				print "Bitte keine Null als Nenner!"
			self.Nenner = nenner
		return self.Nenner
			
	def get_Nenner(self):
		return self.Nenner
	
	def get_Zaehler(self):
		return self.Zaehler
	
	def Multiplikation (self, anderer_Zaehler, anderer_Nenner):
		neuer_zaehler = self.Zaehler * anderer_Zaehler
		neuer_Nenner = self.Nenner  * anderer_Nenner
und nun die Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "Bruch.py", line 38, in <module>
    Bruch1.Multiplikation(Bruch2.get_Zaehler, Bruch2.get_Nenner,)
  File "Bruch.py", line 28, in Multiplikation
    neuer_zaehler = self.Zaehler * anderer_Zaehler
TypeError: unsupported operand type(s) for *: 'int' and 'instancemethod'
Kann mir jemand weiterhelfen? Verstehe das Problem nicht, da ich wenn ich das self vor Zaehler weglasse die Fehlermeldung bekomme, dass der Name nicht bekannt ist. O.k. da kann ich mir noch einen Reim drauf machen.

Breathe_easy
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

au, kannst Du das bitte sauber formatieren und richtig als Python-Code taggen? So ist das verdammt muehsam lesbar und mangels Zeilennummern kann man sich auch schwer auf ne bestimmte Zeile beziehen.

Danke!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

breathe_easy hat geschrieben:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import pdb
class Bruch  ():
	Nenner= 1
	Zaehler = 1
	pdb.set_trace()
	def set_Zaehler (self):
			self.Zaehler =  int(raw_input("Bitte geben Sie den   Zaehler ein; "))
			return zaehler
	
	def set_Nenner(self) :
		nenner = 0
		while nenner ==0 :
			nenner = int(raw_input("Bitte geben Sie den Nenner ein: "))
			if nenner == 0:
				print "Bitte keine Null als Nenner!"
			self.Nenner = nenner
		return self.Nenner
			
	def get_Nenner(self):
		return self.Nenner
	
	def get_Zaehler(self):
		return self.Zaehler
	
	def Multiplikation (self, anderer_Zaehler, anderer_Nenner):
		neuer_zaehler = self.Zaehler * anderer_Zaehler
		neuer_Nenner = self.Nenner  * anderer_Nenner
Zur Frage:

Code: Alles auswählen

 Bruch1.Multiplikation(Bruch2.get_Zaehler, Bruch2.get_Nenner,) 
Du übergibts wirklich 2 Methoden, willst aber wahrscheinlich deren Rückgabewerte.

Code: Alles auswählen

 Bruch1.Multiplikation(Bruch2.get_Zaehler(), Bruch2.get_Nenner()) 
Außerdem war nen Komma zuviel.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Allgemein sieht dein Code aber recht seltsam aus. Beim Aufruf von set_nenner würde ich nicht erwarten, dass ich dazu aufgfordert werde, etwas einzugeben. Du fängst auch keinen Fehler ab, falls man keine Zahl eingibt.

Die Initialisierung von "Nenner" und "Zaehler" würde ich nicht auf Klassenebene machen, erledige das besser in der __init__-Methode. Man merkt zwar in diesem Fall keinen Unterschieden, aber die Werte gehören zu einem Objekt und nicht zur Klasse.

Und wenn du dich schon an OOP versuchst, dann solltest du bei der Multiplikation auch einen Bruch übergeben und nicht einen Zähler und einen Nenner. Die Methoden get_nenner und get_zaehler sind auch überlfüssig. Wenn man keine Extra-Berechnungen zu erledingen hat, greift man in Python direkt auf Attribute zu.

Ein kurzer Blick in PEP8 könnte auch nicht schaden.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

hey langsam! erster Tag OOP in Python. Trotzdem Danke!
Wie übergebe ich denn einen Bruch?

Breathe_easy
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Naja, so wie alles andere auch.
Antworten