Re: Vorstellung, erster Beitrag und Frage
Verfasst: Sonntag 6. Februar 2022, 18:10
Dann bleibt aber der "Umweg" über datetime.datetime richtig?
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
import shelve
speicher = shelve.open ('meineDaten')
spieler_endrunde = ["Heinz", "Kai", "Heike"]
speicher["im Finale"] = spieler_endrunde
speicher.close
Code: Alles auswählen
def berechne_datum_paare (startdatum, kosten_verteilung, budget, entlassung):
liste = []
tage = budget / kosten_verteilung
print("Startdatum: ", startdatum)
print("Entlassung: ", entlassung)
print("Budget reicht für: ", tage)
endedatum_budget = (addiere_tage(startdatum, tage))
print("Ende Budget: ", endedatum_budget)
echtes_ende = min(endedatum_budget, entlassung)
print("Ende Abrechnung: ", echtes_ende)
datum = startdatum
print()
while datum < echtes_ende:
""" Wenn die Liste neu ist, ergänze das
Aufnahmedatum, sonst überspringen """
if len(liste) == 0:
liste.append(startdatum)
""" Da noch das Ende-Datum für die Abrechnung
benötigt wird, wird hier das Ende
Datum berechnet. Das ist entweder das Monatsende,
wenn das Budget länger reicht, als das Monatsende, oder
das Ende Datum des Budgets des Entlastungsbetrages """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31)
liste.append(min(echtes_ende, berechne_monatsletzten(liste[-1])))
""" Da es nun ein Datumspaar gibt, wird noch
die Anzahl der Tage für die Abrechnung benötigt
und in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4]
zeitraum = (berechne_tagesanzahl(liste[-2], liste[-1]))
if zeitraum < tage:
liste.append(zeitraum)
tage = tage - zeitraum
else: liste.append(float(tage))
""" wenn das Ende noch nicht erreicht ist, wird
ein neues 'Beginn - Datum ' in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4, datetime.date(2022, 2, 1)]
if echtes_ende > liste[-2]:
liste.append(addiere_tage(liste[-2],1))
""" Damit die Schleife weiter läuft, da ja das
Ende noch nicht erreicht ist, wird die Variable
DATUM auf den letzten Eintrag in der Liste gesetzt.
Der ist ja durch ein neues Beginn Datum ein Datum"""
datum = liste[-1]
""" Wenn kein neues Beginn Datum angelegt wurde,
dann ist der letzte Eintrag ein Tag. Dann ist
das letzte Datum das vorletzte Element der Liste.
Das muss dann das Ende der Schleife sein """
else:
datum = liste[-2]
return(liste)
Code: Alles auswählen
startdatum = date(2022,1,27)
endedatum = date(2022,2,17)
x = berechne_datum_paare (startdatum, 140, 1100, endedatum)
Code: Alles auswählen
from datetime import date
from Umwandlung import berechne_tagesanzahl
from Umwandlung import addiere_tage
from Umwandlung import berechne_monatsletzten
""" Diese Funktion berechnet eine Liste von
relevanten Datumspaaren, und berechent die
für die Abrechnung relevanten Tage als jeweils
3. Element """
""" Übergeben wird ein Startdatum oder das Datum
des Endes des Budgets """
def berechne_datum_paare (startdatum, kosten_verteilung, budget, entlassung):
liste = []
tage = budget / kosten_verteilung
print("Startdatum: ", startdatum)
print("Entlassung: ", entlassung)
print("Budget reicht für: ", tage)
endedatum_budget = (addiere_tage(startdatum, tage))
print("Ende Budget: ", endedatum_budget)
echtes_ende = min(endedatum_budget, entlassung)
print("Ende Abrechnung: ", echtes_ende)
datum = startdatum
print()
datum1 = ""
datum2 = ""
while datum < echtes_ende:
""" Wenn die Liste neu ist, ergänze das
Aufnahmedatum, sonst überspringen """
if len(liste) == 0:
datum1 = startdatum
""" Da noch das Ende-Datum für die Abrechnung
benötigt wird, wird hier das Ende
Datum berechnet. Das ist entweder das Monatsende,
wenn das Budget länger reicht, als das Monatsende, oder
das Ende Datum des Budgets des Entlastungsbetrages """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31)
datum2 = (min(echtes_ende, berechne_monatsletzten(datum1)))
""" Da es nun ein Datumspaar gibt, wird noch
die Anzahl der Tage für die Abrechnung benötigt
und in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4]
zeitraum = (berechne_tagesanzahl(datum1, datum2))
if zeitraum < tage:
faktor = zeitraum
tage = tage - zeitraum
else: faktor=float(tage)
""" alle Daten sind gesammelt - schreibe Eintrag in Liste """
liste.append((datum1, datum2, faktor))
""" wenn das Ende noch nicht erreicht ist, wird
ein neues 'Beginn - Datum ' in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4, datetime.date(2022, 2, 1)]
if echtes_ende > liste[-1][-2]:
datum1 = addiere_tage(liste[-1][-2],1)
""" Damit die Schleife weiter läuft, da ja das
Ende noch nicht erreicht ist, wird die Variable
DATUM auf den letzten Eintrag in der Liste +1 gesetzt.
Der ist ja durch ein neues Beginn Datum ein Datum"""
datum = datum1
""" Wenn kein neues Beginn Datum angelegt wurde,
dann ist der letzte Eintrag ein Tag. Dann ist
das letzte Datum das vorletzte Element der Liste.
Das muss dann das Ende der Schleife sein """
else:
datum = liste[-1][-2]
return(liste)
# ------------- Test Umwandlung der Liste
startdatum = date(2022,1,27)
endedatum = date(2022,2,17)
x = berechne_datum_paare (startdatum, 140, 1100, endedatum)
print(x)
Code: Alles auswählen
from datetime import date
from Umwandlung import berechne_tagesanzahl
from Umwandlung import addiere_tage
from Umwandlung import berechne_monatsletzten
""" Diese Funktion berechnet eine Liste von
relevanten Datumspaaren, und berechent die
für die Abrechnung relevanten Tage als jeweils
3. Element """
""" Übergeben wird ein Startdatum oder das Datum
des Endes des Budgets """
def berechne_datum_paare (startdatum, kosten_verteilung, budget, entlassung):
liste = []
tage = budget / kosten_verteilung
print("Startdatum: ", startdatum)
print("Entlassung: ", entlassung)
print("Budget reicht für: ", tage)
endedatum_budget = (addiere_tage(startdatum, tage))
print("Ende Budget: ", endedatum_budget)
echtes_ende = min(endedatum_budget, entlassung)
print("Ende Abrechnung: ", echtes_ende)
datum = startdatum
print()
datum1 = startdatum
datum2 = ""
while datum1 < echtes_ende:
""" Wenn die Liste neu ist, ergänze das
Aufnahmedatum, sonst überspringen """
if len(liste) == 0:
datum1 = startdatum
""" Da noch das Ende-Datum für die Abrechnung
benötigt wird, wird hier das Ende
Datum berechnet. Das ist entweder das Monatsende,
wenn das Budget länger reicht, als das Monatsende, oder
das Ende Datum des Budgets des Entlastungsbetrages """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31)
datum2 = (min(echtes_ende, berechne_monatsletzten(datum1)))
""" Da es nun ein Datumspaar gibt, wird noch
die Anzahl der Tage für die Abrechnung benötigt
und in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4]
zeitraum = (berechne_tagesanzahl(datum1, datum2))
if zeitraum < tage:
faktor = zeitraum
tage = tage - zeitraum
else: faktor=float(tage)
""" alle Daten sind gesammelt - schreibe Eintrag in Liste """
liste.append((datum1, datum2, faktor))
""" wenn das Ende noch nicht erreicht ist, wird
ein neues 'Beginn - Datum ' in die Liste geschrieben """
# Bsp: [datetime.date(2022, 1, 28), datetime.date(2022, 1, 31), 4, datetime.date(2022, 2, 1)]
if echtes_ende > liste[-1][-2]:
datum1 = addiere_tage(liste[-1][-2],1)
""" Damit die Schleife weiter läuft, da ja das
Ende noch nicht erreicht ist, wird die Variable
DATUM auf den letzten Eintrag in der Liste +1 gesetzt.
Der ist ja durch ein neues Beginn Datum ein Datum"""
""" Wenn kein neues Beginn Datum angelegt wurde,
dann ist das Ende erreicht. """
else:
break
return(liste)
Code: Alles auswählen
#!/usr/bin/env python3
def make_something(answers):
print([int(answer + 1 for answer in answers])
def take_user_input():
answers = []
for number in range(14):
answers.append(input(f'Bitte {number}. Wert eingeben: '))
return answers
def main():
answers = take_user_input()
make_something(answers)
if __name__ == '__main__':
main()
Code: Alles auswählen
from umwandlung import berechne_tagesanzahl, addiere_tage, berechne_monatsletzten
def berechne_datum_paare(startdatum, kosten_verteilung, budget, entlassung):
""" Diese Funktion berechnet eine Liste von
relevanten Datumspaaren, und berechent die
für die Abrechnung relevanten Tage als jeweils
3. Element """
tage = budget / kosten_verteilung
endedatum_budget = addiere_tage(startdatum, tage)
echtes_ende = min(endedatum_budget, entlassung)
print("Startdatum: ", startdatum)
print("Entlassung: ", entlassung)
print("Budget reicht für: ", tage)
print("Ende Budget: ", endedatum_budget)
print("Ende Abrechnung: ", echtes_ende)
print()
liste = []
datum = startdatum
while datum < echtes_ende:
# Da noch das Ende-Datum für die Abrechnung
# benötigt wird, wird hier das Ende
# Datum berechnet. Das ist entweder das Monatsende,
# wenn das Budget länger reicht, als das Monatsende, oder
# das Ende Datum des Budgets des Entlastungsbetrages """
enddatum = min(echtes_ende, berechne_monatsletzten(datum))
zeitraum = berechne_tagesanzahl(datum, enddatum)
liste.append((datum, enddatum, zeitraum))
datum = addiere_tage(enddatum, 1)
return liste