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

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
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

Donnerstag 22. Januar 2009, 10:25

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
Zuletzt geändert von Dr.Miles am Donnerstag 22. Januar 2009, 12:56, insgesamt 1-mal geändert.
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Donnerstag 22. Januar 2009, 10:41

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)
Zuletzt geändert von Darii am Donnerstag 22. Januar 2009, 10:48, insgesamt 2-mal geändert.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Donnerstag 22. Januar 2009, 10:44

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
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

Donnerstag 22. Januar 2009, 12:56

Danke nochmals, das beantwortet meine Frage.
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Antworten