Hallo zusammen,
mein Name ist Klaus, ich bin 53 Jahre alt und neu hier. Ich versuche mich zurzeit an Programmiersprachen, genauer gesagt an C und Python. Leider ist C und Python doch sehr unterschiedlich und deshalb würde ich euch gerne um Hilfe bitten.
Ich versuche in Python ein Programm zu schreiben das meine eingegebene Sekundenanzahl in Jahr-Monat-Tage-Minute-Sekunde rausgibt.
Beispiel: ich gebe 7464643 Sekunden ein und es soll mir anzeigen das es 0 Jahre, 86 Tage, 9 Stunden, 30 Minuten und 42 Sekunden sind.
In C hätte ich das ganze über Modulo gemacht. Leider verstehe ich nicht wie ich das in Python machen kann.
So habe ich angefangen aber das ist leider falsch:
seconds = int(input("Gebe die anzahl der Sekunden : "))
jahr = round(seconds/31540000)
tag = round(seconds/86400)
stunde = round(seconds/3600)
minute = round(seconds/60)
sekunde = round(seconds)
print(""+str (sekunde)+" Sekunden sind "+str (jahr)+" Jahr(e), "+str (tag)+" Tage, "+str (stunde)+" Stunde(n), "+str (minute)+" Minute(n) und "+str (sekunde)+" Sekunden")
Ich wäre euch dankbar wenn Ihr mir helfen könntet und freue mich ein Teil von diesem Forum zu sein.
Liebe Grüße
Klaus
Eingegebene Sekunden in Jahr/tag/Stunden
Hallo Klaus,
Modulo geht in Python mit dem %-operator. Wie auch in C. Das fehlende Puzzlestück ist denke ich eher die ganzzahlige Division, die du mit // bekommst. Python hat das vor einigen Jahren eingeführt, weil mehr Leuten die Nachkommastellen gefehlt haben.
Die Ausgabe macht sich übrigens DEUTLICH leichter mit Format-strings:
Würde ich dir ans Herz legen, die zu verwenden.
Modulo geht in Python mit dem %-operator. Wie auch in C. Das fehlende Puzzlestück ist denke ich eher die ganzzahlige Division, die du mit // bekommst. Python hat das vor einigen Jahren eingeführt, weil mehr Leuten die Nachkommastellen gefehlt haben.
Die Ausgabe macht sich übrigens DEUTLICH leichter mit Format-strings:
Code: Alles auswählen
print(f"{sekunde} sind {jahr} Jahre, …")
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei ich dafür statt so grosser Sekundenzahlen wohl eher die `divmod()`-Funktion verwendet hätte um die Zahl(en) immer weiter herunter zu brechen. Ist IMHO verständlicher beim lesen und deshalb auch weniger fehleranfällig.
Die `divmod()`-Funktion gibt es auch in Python und C, aber in Python ist es praktisch, dass man ein iterierbares Objekt gleich bei der Zuweisung schon an mehrere Namen zuweisen/aufteilen kann.
Die `divmod()`-Funktion gibt es auch in Python und C, aber in Python ist es praktisch, dass man ein iterierbares Objekt gleich bei der Zuweisung schon an mehrere Namen zuweisen/aufteilen kann.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Hallo Deets,
danke für deine so schnelle Antwort und dein Hilfreichen Tipp. Ich werde mich nochmal ran versuchen und würde falls es nicht klappt oder falls es klappt, gerne nochmal hier melden, wenn das für euch in Ordnung ist. Bitte nimmt es mir nicht übel wenn ich doch sehr langsam bin oder die Sachen nicht ganz verstehe. Programmiersprachen sind sehr neu für mich.
Liebe Grüße
Klaus
danke für deine so schnelle Antwort und dein Hilfreichen Tipp. Ich werde mich nochmal ran versuchen und würde falls es nicht klappt oder falls es klappt, gerne nochmal hier melden, wenn das für euch in Ordnung ist. Bitte nimmt es mir nicht übel wenn ich doch sehr langsam bin oder die Sachen nicht ganz verstehe. Programmiersprachen sind sehr neu für mich.
Liebe Grüße
Klaus
Hallo Blackjack,
danke für deine Antwort. Müsste ich dann das divmod () so einsetzen: divmod(jahr = round(seconds//31540000))?
Wenn es dir keine Umstände macht, könntest du mir kurz erläutern wie das aussieht? Ich bedanke mich für eure Unterstützung!
LG
Klaus
danke für deine Antwort. Müsste ich dann das divmod () so einsetzen: divmod(jahr = round(seconds//31540000))?
Wenn es dir keine Umstände macht, könntest du mir kurz erläutern wie das aussieht? Ich bedanke mich für eure Unterstützung!
LG
Klaus
- DeaD_EyE
- User
- Beiträge: 1206
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Code: Alles auswählen
sekunden = 3661
stunden, sekunden = divmod(sekunden, 3600)
minuten, sekunden = divmod(sekunden, 60)
Auf der linken Seite vor dem Gleichheitszeichen befinden sich Namen, denen das iterierbare Objekt auf der rechten Seite zugewiesen werden soll.
Die Funktion divmod gibt eine Tuple mit zwei integer/float aus.
Ach, die Hilfe spricht doch für sich selbst:
Code: Alles auswählen
help(divmod)
Help on built-in function divmod in module builtins:
divmod(x, y, /)
Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Man würde von Sekunden hin zu immer größeren Zeiteinheiten gehen:
Code: Alles auswählen
rest_in_minuten, sekunden = divmod(gesamtzeit_in_sekunden, 60)
Du meinst aber doch sicherlich
und dann weiter
Code: Alles auswählen
minuten, rest_in_sekunden = divmod(gesamtzeit_in_sekunden, 60)
Code: Alles auswählen
stunden, rest_in_minuten = divmod(minuten, 60)
tage, rest_in_stunden = divmod(stunden, 24)
jahre , rest_in_tage = divmod(tage, 365)
print(jahre, rest_in_tage, rest_in_stunden, rest_in_minuten, rest_in_sekunden)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hallo zusammen,
vielen lieben Dank für die Hilfreichen Antworten! Ich habe versucht das meiste umzusetzen jedoch kommt bei mir ein falsches Ergebnis dabei raus.
das Ergebnis davon ist das :
Gebe die anzahl der Sekunden:
7464643
7464643 Sekunde(n) sind 0 Jahr(e), 14 Tag(e), 9 Stunde(n), 210 Minute(n) und 43 Sekunde(n)
Das scheint mir leider etwas falsch zu sein
LG
Klaus
vielen lieben Dank für die Hilfreichen Antworten! Ich habe versucht das meiste umzusetzen jedoch kommt bei mir ein falsches Ergebnis dabei raus.
Code: Alles auswählen
sekunden = int(input("Gebe die anzahl der Sekunden : "))
minuten, rest_in_sekunden = divmod(sekunden, 60)
stunden, rest_in_minuten = divmod(minuten, 360)
tage, rest_in_stunden = divmod(stunden, 24)
jahre , rest_in_tage = divmod(tage, 365)
print(f"{sekunden} Sekunde(n) sind {jahre} Jahr(e), {rest_in_tage} Tag(e), {rest_in_stunden} Stunde(n), {rest_in_minuten} Minute(n) und {rest_in_sekunden} Sekunde(n)")
Gebe die anzahl der Sekunden:
7464643
7464643 Sekunde(n) sind 0 Jahr(e), 14 Tag(e), 9 Stunde(n), 210 Minute(n) und 43 Sekunde(n)
Das scheint mir leider etwas falsch zu sein

LG
Klaus