Du bist nicht eingeloggt.

Login

Pass

Registrieren

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 :-D

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
  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -