Schichtplan erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sven71dachs
User
Beiträge: 4
Registriert: Dienstag 27. Juli 2010, 15:39

Hallo zusammen,

ich möchte meinen Schichtplan mit dem Jahr verbinden,
sodass mit der Eingabe eines Datums die Schicht oder frei erscheint.
Der Schichtrythmus wiederholt sich ja immer.
Mir geht es nur um den Ansatz wie man Datum und Schichtrythmus verbindet.
BlackJack

@sven71dachs: So allgemein kann man wohl nur sagen, dass Du Dir das `datetime`-Modul mal anschauen solltest. Ansonsten müsstest Du IMHO etwas mehr über die Eigenschaften des Rythmus' verraten.
sven71dachs
User
Beiträge: 4
Registriert: Dienstag 27. Juli 2010, 15:39

sory das ich mich erst jetzt melde,

also, die Eigenschaft ist die, dass sich alle 28 Tage die Schicht wiederholt.
z.B. 4xfrüh, 3xnacht.........., und wieder 4xfrüh, 3xmalnacht
Meine Ansatz wäre dies in eine Liste zu schreiben und dann mit
der Zeit zu verbinden.
Ziel ist es für mich, als erster Schritt, ein Datum einzugeben und dann die Schicht zu erhalten.
Zuletzt geändert von sven71dachs am Freitag 30. Juli 2010, 20:35, insgesamt 1-mal geändert.
BlackJack

@sven71dachs: Was soll sich alle 28 Tage wiederholen? 4× früh und 3× nacht sind ja nur 7 Tage!?

Mal so als Denkanstoss:

Code: Alles auswählen

from datetime import date as Date, timedelta as TimeDelta
from itertools import islice


def date_iter(start):
    one_day = TimeDelta(days=1)
    date = start
    while True:
        yield date
        date += one_day


def main():
    pattern = ['frueh'] * 4 + ['nacht'] * 3
    offset = 3
    for date in islice(date_iter(Date.today()), 20):
        print date, pattern[(date.toordinal() + offset) % len(pattern)]


if __name__ == '__main__':
    main()
sven71dachs
User
Beiträge: 4
Registriert: Dienstag 27. Juli 2010, 15:39

ok,dies ist der Schichtalgorythmus

s4

Code: Alles auswählen

s4 = ["F", "F", "F", "F", "N", "N", "N",  # 4x Früh + 3x Nacht
      "f", "f", "S", "S", "S", "f", "f",  # 2x frei + 3x Spät + 2x frei 
      "N", "N", "f", "f", "F", "F", "F",  # 2x Nacht + 2x frei + 3x Füh 
      "S", "S", "N", "N", "f", "f"]       # 2x Spät + 2x Nacht + 2x frei
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ansatz: Von gegebenem Datum aus den relativen Abstand zum Tag des Rhythmusbeginns herausfinden (nennen wir den Abstand mal "a"). Das a-te Element der Liste ausgeben. :)

Für die Berechnung des Abstandes: Wird ziemlich einfach, wenn der Rhythmus z.B. immer am 1ten jeden Monats beginnt, ansonsten mal das datetime-Modul und insbesondere timedelta daraus angucken.
sven71dachs
User
Beiträge: 4
Registriert: Dienstag 27. Juli 2010, 15:39

Hallo zusammen,

also der Denkanstoß hat etwas länger gedauert.

Der Generator für das Datum ist schön einfach.

Aber bei der mainFunktion happert es etwas.
Wie bist du auf die Modulo Operation mit dem Offset gekommen?

Code: Alles auswählen

pattern[(date.toordinal() + offset) % len(pattern)])
Antworten