Seite 1 von 1

[gelöst] Keine ints als Parameter bei Konstruktoraufruf?

Verfasst: Donnerstag 22. Januar 2009, 10:25
von Dr.Miles
Hallo,
ich habe das Beispiel mit dem Time Objekt aus "Wie ein infomratiker denken lernen" nachgeschrieben, aber erhalte wenn ich eine Zahl übergebe immer diese Exception:
>python -u "class_Time_uebung.py"
File "class_Time_uebung.py", line 9
zeit = Time(09, 17, 34)
^
SyntaxError: invalid token
>Exit code: 1

Code: Alles auswählen

Bei disem Code tritt der fehler auf:
class Time :
	def __init__(self,hours,minutes,seconds):
		self.hours = hours
		self.minutes = minutes
		self.seconds = seconds
	def printTime(self):
		print self.hours , ":" , self.minutes , ":" , self.seconds

zeit = Time(09, 17, 34) #In dieser zeile
print zeit.printTime()
Wenn ich die betreffende zeile durch

Code: Alles auswählen

zeit = Time("09", "17", "34")
ersetze, tritt der Fehler nicht mehr auf...

Edit: Habe herausgefunden, das es an der 0 liegt. Aber warum?

Danke im voraus
Gruß
Dr.Miles

Verfasst: Donnerstag 22. Januar 2009, 10:41
von Darii
Weil ganze Zahlen nunmal nicht mit Nullen anfangen. Zahlen die mit 0 beginnen werden von Python als Zahlen zur Basis 8 interpretiert und diese Zahlen haben nur Ziffern von 0 bis 7. Das wurde in Python3 übrigens abgeschafft, stattdessen verwendet man dann 0o als Präfix.

Übergib einfach Zahlen und benutz zur Ausgabe einen formatierten String

Code: Alles auswählen

print "%02d:%02d:%02d" % (self.hours, self.minutes, self.seconds)

Verfasst: Donnerstag 22. Januar 2009, 10:44
von HerrHagen
Wenn eine Null vor der Zahl steht, interpretiert Python die Zahl als oktal, nicht als dezimal. Und bei Oktalzahlengibts nun mal keine 9.

Code: Alles auswählen

>>> print 071
57

Verfasst: Donnerstag 22. Januar 2009, 12:56
von Dr.Miles
Danke nochmals, das beantwortet meine Frage.