Seite 1 von 1

Fehlermeldung tuple object

Verfasst: Freitag 4. Mai 2012, 16:21
von JuGa2000
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

Re: Fehlermeldung tuple object

Verfasst: Freitag 4. Mai 2012, 16:39
von anogayales
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

Re: Fehlermeldung tuple object

Verfasst: Freitag 4. Mai 2012, 16:40
von 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.

Re: Fehlermeldung tuple object

Verfasst: Samstag 5. Mai 2012, 13:56
von JuGa2000
cool danke jetzt funzt es :!: :!:

Re: Fehlermeldung tuple object

Verfasst: Samstag 5. Mai 2012, 14:53
von 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.