|
Community
Szene & News
Locations
Impressum
|
Forum / Bits und Bytes
brauche hilfe in python

#CaNe - 39
Champion
(offline)
Dabei seit 01.2005
2705
Beiträge
|
|
Geschrieben am: 06.05.2008 um 11:48 Uhr
|
|
hallo
ich hoffe mir kann hier jemand helfen, ich soll eine routine in python schreiben du zu jedem belibigen datum das datum des vortages ausgibt. aber irgendwo steckt da noch der wurm drin zb gibt es für das datum 17.2.2000 den 31.2.2000 aus
uns ich finde einfach ums verrecken den fehler nicht.
ich hoff mir kann jemand weiterhelfen.
der quelltext sieht so aus
Zitat:
datum = raw_input ("Geben sie ein Datum ein (Format: dd.mm.yyyy):")
#print datum
#print datum.split(".")
tag=datum.split(".") [0]
monat=datum.split(".") [1]
jahr=datum.split(".") [2]
#print tag, monat, jahr
tag=int(tag)
monat=int(monat)
jahr=int(jahr)
#print tag, monat, jahr
if tag >31 :
print "Eingabefehler"
if monat >12:
print "Eingabefehler"
if tag == 1 and monat == 3 or monat == 5 or monat == 7 or monat ==10 or monat == 12:
tagneu=30
monatneu=monat-1
elif tag == 1 and monat == 1 or monat == 2 or monat == 4 or monat == 6 or monat == 8 or monat == 9 or monat == 11:
tagneu=31
monatneu=monat-1
else:
tagneu = tag-1
#print tagneu
if monat == 1 and tag == 1:
monatneu = 12
else:
monatneu=monat
if monat == 1 and tag == 1:
jahrneu = jahr-1
else:
jahrneu=jahr
print "Gestern war der: %s.%s.%s" % (tagneu, monatneu, jahrneu)
anmerkung: die schaltjahrfunktion wurde noch nicht eingebaut, das kommt noch
THX schonmal
God of War || Join: http://www.team-ulm.de/MyGroups/64898
|
|
Barmonster - 41
Champion
(offline)
Dabei seit 07.2005
3952
Beiträge
|
Geschrieben am: 06.05.2008 um 12:44 Uhr
Zuletzt editiert am: 06.05.2008 um 12:44 Uhr
|
|
also ich hab von programmieren keine Ahnung, aber mir fällt mitten drin ne kleine Unregelmäßigkeit auf: da hast du mal "elif tag == 1[...]" benutzt. Ist der Befehl so korrekt?
Viele Leute sind verwirrt, wenn ein Satz anders endet als man Rübenmus!
|
|
rochus - 41
Profi
(offline)
Dabei seit 10.2004
536
Beiträge
|
|
Geschrieben am: 06.05.2008 um 13:34 Uhr
|
|
abgesehen davon, dass du sehr viel unnoetiges zeug machst, fehlen bei dir klammern, wodurch der fehler wohl auftaucht. beispiel:
if tag == 1 and monat == 3 or monat == 5 or monat == 7
-> das and bindet nur den tag und den ersten monat zusammen. damit das semantisch korrekt ist, muss das so sein:
if tag == 1and (monat == 3 or monat == 5 ...)
wesentlich eleganter ist das jedoch so geloest:
if (tag == 1) and (monat in [3,5,7,10,12]):
gruesse
bashian roulette: $ ((RANDOM%6)) || rm -rf /
|
|
Bigfoot29 - 46
Profi
(offline)
Dabei seit 04.2008
924
Beiträge
|
Geschrieben am: 06.05.2008 um 13:38 Uhr
Zuletzt editiert am: 06.05.2008 um 13:39 Uhr
|
|
Nehmen wir es mal auseinander...
Zitat: atum = raw_input ("Geben sie ein Datum ein (Format: dd.mm.yyyy):")
#print datum
#print datum.split(".")
tag=datum.split(".") [0]
monat=datum.split(".") [1]
jahr=datum.split(".") [2]
#print tag, monat, jahr
tag=int(tag)
monat=int(monat)
jahr=int(jahr)
#print tag, monat, jahr
if tag >31 :
print "Eingabefehler"
if monat >12:
print "Eingabefehler"
Soweit siehts gut aus... - ich würde in der nächsten zeile jedoch die Monatsprüfung einklammern. Andernfalls prüft er nur, ob Tag==1 and monat==1 - für Monat == [2,4,6,8,9,11] prüft er nur, ob der Monat gegeben ist. (Wie in Mathe mit Punkt- vor Strichrechnung)
Zitat: if tag == 1 and monat == 3 or monat == 5 or monat == 7 or monat ==10 or monat == 12:
alternativ schreib:
Zitat: if tag == 1 and monat in [1,2,4,6,8,9,11]:
Sollte tun - muss aber nicht ;)
Im elif unten ist wieder das problem der und/oder-Verknüpfung, auf das ich nicht mehr eingehe...
Zitat: tagneu=30
monatneu=monat-1
elif tag == 1 and monat == 1 or monat == 2 or monat == 4 or monat == 6 or monat == 8 or monat == 9 or monat == 11:
tagneu=31
monatneu=monat-1
else:
tagneu = tag-1
#print tagneu
if monat == 1 and tag == 1:
monatneu = 12
else:
monatneu=monat
if monat == 1 and tag == 1:
jahrneu = jahr-1
else:
jahrneu=jahr
print "Gestern war der: %s.%s.%s" % (tagneu, monatneu, jahrneu)
Seltsamerweise finde ich erstmal nicht den Fehler um das Jahrzurückzählen zu klären...
Gruß.
Edit: AAAH... rochus war eher :)
LMAA! - Lächle Mehr Als Andere!
|
|
BACundARDI - 43
Halbprofi
(offline)
Dabei seit 10.2004
144
Beiträge
|
|
Geschrieben am: 06.05.2008 um 14:04 Uhr
|
|
Ich dachte immer Python wär ne Schlange
|
|
Bigfoot29 - 46
Profi
(offline)
Dabei seit 04.2008
924
Beiträge
|
|
Geschrieben am: 06.05.2008 um 14:23 Uhr
|
|
Is sie ja auch... Die Python-Schlange ist ne Schlange.
Die Sprache basiert auf olle Monty ;)
Gruß.
LMAA! - Lächle Mehr Als Andere!
|
|
#CaNe - 39
Champion
(offline)
Dabei seit 01.2005
2705
Beiträge
|
Geschrieben am: 06.05.2008 um 14:32 Uhr
Zuletzt editiert am: 06.05.2008 um 14:34 Uhr
|
|
schlange hin oder her 
zumindest stimmt die sache jetzt
hier nochmal der quelltext:
Zitat:
datum = raw_input ("Geben sie ein Datum ein (Format: dd.mm.yyyy):")
tag=datum.split(".") [0]
monat=datum.split(".") [1]
jahr=datum.split(".") [2]
tag=int(tag)
monat=int(monat)
jahr=int(jahr)
if tag >31 :
print "Eingabefehler"
if monat >12:
print "Eingabefehler"
if tag == 01 and (monat == 3 or monat == 5 or monat == 7 or monat ==10 or monat == 12):
tagneu=30
monatneu=monat-1
if tag == 01 and (monat == 1 or monat == 4 or monat == 6 or monat == 8 or monat == 9 or monat == 11):
tagneu=31
monatneu=monat-1
else:
tagneu = tag-1
monatneu=monat
if monat == 1 and tag == 1:
monatneu = 12
tagneu=31
jahrneu=jahr-1
else:
jahrneu=jahr
print "Gestern war der: %s.%s.%s" % (tagneu, monatneu, jahrneu)
thx an alle die mir geholfen haben
wenn ich bei einbauen der schaltjahrfunktion nochmal probleme haben sollte meld ich mich wieder
und python ist nicht nur eine schlange
God of War || Join: http://www.team-ulm.de/MyGroups/64898
|
|
TheRaven - 39
Profi
(offline)
Dabei seit 10.2003
551
Beiträge
|
Geschrieben am: 09.10.2008 um 21:32 Uhr
Zuletzt editiert am: 09.10.2008 um 21:35 Uhr
|
|
Warum so umständlich selber schreiben? Python hat ausgezeichnete Libraries für sowas.
Hier mal ein kleines Beispiel für deine Aufgabe ohne Fehlerüberprüfung:
Ich hoff ich hab nix übersehen.
Zitat:
from datetime import date,timedelta
datestr = raw_input("Geben Sie ein Datum ein (Format: dd.mm.yyyy):")
(day,month,year) = datestr.split('.')
mydate = date(int(year),int(month),int(day))
delta = timedelta(1) # 1 Tag Zurueckrechnen
newdate = mydate - delta
print "Gestern war der: %.2d.%.2d.%.4d" % (newdate.day, newdate.month, newdate.year)
Edit: Ich weiss - Leichenschänder - das kommt davon wenn man nich aufs Datum schaut
|
|
Forum / Bits und Bytes
|