Fehlermeldung tuple object

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
JuGa2000
User
Beiträge: 3
Registriert: Freitag 4. Mai 2012, 16:05

hallo ich programmiere noch nicht so lange. ich hab so einen programmierkurs belegt und da machen wir gerade so ein programm, mitdem man :roll: :roll: feststellen kann, wie lange es her ist das man halb so alt war wie man jetzt ist.

Code: Alles auswählen

#Unterprogramm 1
def zeitbisHeute(datumGeburt, datumHeute):
    datum=datumGeburt
    anzahl=0
    while datum!=datumHeute:
        datum=(t,m,j)
    if monat in [1,3,5,7,8,10,12]:
        maxtage=31
    elif monat in [4,6,9,11]:
        maxtage=30
    elif schaltjahr(jahr):
        maxtage=29
    elif not schaltjahr(jahr):
        maxtage=28
    else:
        print "falsches datum"
    while datumGeburt(t,m,j)!=datumHeute(t,m,j):
        datumGeburt=datumGeburt
    return anzahl

#Unterprogramm 2
def schaltjahr(jahr):
    return(jahr%400==0) or ((jahr%4==0) and not (jahr%100==0))

#Hauptprogramm
print "das hier ist ein programm, um herauszufinden, wie lange es her ist, dass du halb so alt warst wie heute"
datumGeburt=input ("sag mir deinen geburtstag:")
(tag,monat,jahr)=datumGeburt
datumHeute=input ("sag mir das datum heute:")
(t,m,j)=datumHeute
anzahl=zeitbisHeute (datumGeburt, datumHeute)
halbeanzahl=anzahl//2
print halbeanzahl
und dann kommt immer

Code: Alles auswählen

Traceback (most recent call last):
  File "F:\Unterprogramme.py", line 31, in <module>
    anzahl=zeitbisHeute (datumGeburt, datumHeute)
  File "F:\Unterprogramme.py", line 17, in zeitbisHeute
    while datumGeburt(t,m,j)!=datumHeute(t,m,j):
TypeError: 'tuple' object is not callable
ich hoffe ihr könnt mir helfen
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Tupel vergleicht man so:

Code: Alles auswählen

if tuple1 != tuple2:
    pass
Du probierst mit deiner Schreibweise eine Funktion die an datumHeute gebunden ist aufzurufen. Da datumHeute ein tupel Objekt ist und dieses einen Funktionsaufruf nicht implementiert, bekommst du die besagte Fehlermeldung.

Außerdem gibt deine zeitbisHeute Funktion immer 0 zurück, oder überseh ich da was? Für Datumsberechnungen gibt es übrigens ein eigenes python modul: datetime [1].

[1] http://docs.python.org/library/datetime.html

Grüße,
anogayales
Zuletzt geändert von anogayales am Freitag 4. Mai 2012, 16:45, insgesamt 2-mal geändert.
problembär

Code: Alles auswählen

while datumGeburt(t,m,j)!=datumHeute(t,m,j):
datumGeburt und datumHeute sind hier Tuples.
Die Syntax mit den runden Klammern "func(arg)" ist aber für Funktionen. Deshalb die Fehlermeldung, daß datumGeburt und datumHeute nicht aufrufbar, also keine Funktionen sind.

Auch ansonsten in

Code: Alles auswählen

datumGeburt=input ("sag mir deinen geburtstag:")
(tag,monat,jahr)=datumGeburt
gefällt mir nicht, wie dort mit Tuples umgegangen wird, auch wenn es zulässig ist.
JuGa2000
User
Beiträge: 3
Registriert: Freitag 4. Mai 2012, 16:05

cool danke jetzt funzt es :!: :!:
BlackJack

@JuGa2000: Ein Test auf Schaltjahr gibt es schon fertig im `calendar`-Modul in der Standardbibliothek. Aber noch einfacher wäre es tatsächlich die Datentypen aus dem `datetime`-Modul zu verwenden.
Antworten