Wenn ich den Begriff kennen würde, würde ich ihn googlen.

Du hast eine Idee für ein Projekt?
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Das funktioniert ja offensichtlich nicht weil in der ersten Funktion lokale Namen definiert werden, mit denen nichts gemacht wird, und in der zweiten Funktion versucht wird Namen zu verwenden, die es nicht gibt.

Das Programm in „lesen“ und „schreiben“ zu unterteilen ist auch recht grob, auch wenn eine Aufteilung von Eingabe, Verarbeitung, und Ausgabe grundsätzlich nicht unüblich ist. Aber die Aufteilung stimmt so ja auch nicht weil auch in `write()` noch Angaben vom Benutzer eingelesen werden. Wenn man es tatsächlich so unterteilt, dann muss man momentan auch einen ziemlichen Haufen Einzelwerte zurück- und/oder übergeben. Man könnte da mal überlegen ob man das irgendwie strukturiert. Mit `collections.namedtuple()` oder eigenen Klassen.

Was hat die Eingabe 'rekla' bei Kommissionen eigentlich für eine Bedeutung? Kann man da 'rekla' eingeben, die Frage nach Reklamation später dann aber *nicht* mit Ja beantworten? Falls nein, ist der Ablauf falsch strukturiert oder die extra Frage nach Reklamation redundant und damit überflüssig.

Das ``else: return`` am Ende macht keinen Sinn weil das keinen feststellbaren Effekt auf den Programmablauf hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

das das nicht funktioniert ist mir klar mir ist nur nicht klar was du meinst mit "Benutzerinteraktion und Programmlogik sollte man vielleicht auch langsam mal trennen."
also was es bedeutet weis ich nur weis ich nicht wie ich das umsetzen soll
das mit rekla stimmt wenn man eine rekla tour fährt schreibt man bei Kommission rekla rein und muss trotzdem gefragt werden ob es wieder Reklas gibt..leider^^

stimmt das return brauch ich ja gar nicht^^
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Programmlogik hast Du ja nicht so viel, aber das könnte man halt aus dem Teil mit der Benutzerinteraktion heraus nehmen. Also das wo Daten verarbeitet werden, was nicht direkt mit der Eingabe durch den Benutzer oder die Ausgabe der Daten betrifft. Zum Beispiel eben die Berechnung der Zeit aus den eingegebenen Daten. Die Teile des Programms die unabhängig davon sind das Du die Daten per `input()` vom Benutzer abfragst und ihm etwas mit `print()` mitteilst. Oder anders gesagt: Wenn Du da irgendwann eine GUI oder eine Weboberfläche drauf setzen würdest, hast Du ja Code den Du dann nicht noch mal schreiben oder da rein kopieren wolltest, weil der unabhängig davon ist.

Ich glaube auf `eintrag` und `rekla_tag_eintrag` wurdest Du schon einmal hingewiesen. Davon sollte nur ein Name existieren der entweder an den einen oder an den anderen Text gebunden wird, denn die schliessen sich ja anscheinend gegenseitig aus. Zudem haben alle drei Texte Gemeinsamkeiten die man heraus ziehen kann. Den `list_eintrag` könnte man auch als `collections.namedtuple()` am Anfang definieren und dann für die Erstellung der Texte heran ziehen. Da hätte man dann schon mal ein paar Einzelwerte sinnvoll zusammengefasst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Ich würde für den Anfang aber vielleicht auch gar nicht in grosse Abschnitte/Funktionen aufteilen, sondern erst einmal die ganzen Abfragen vom Benutzer die nicht einfach nur aus einem `input()` bestehen in Funktionen auslagern. Zum Beispiel `erfrage_aufraggeber()`, `erfrage_zeitpunkt()`, `erfrage_dauer()`, `erfrage_ja_nein()`. Und die dann auch gleich die Eingaben validieren und konvertieren lassen. Dann hast Du zum Beispiel im Hauptprogramm auch nicht das Problem alle Zeiteingaben in zwei Formen zu haben und Dir unterschiedliche Namen dafür ausdenken zu müssen. `start` wäre dann in der Hauptfunktion ein `datetime`-Objekt und keine Zeichenkette. Die drei Funktionen zur Abfrage von Start, Ende, und Pause könnte man dann auch in einer Funktion `erfrage_arbeitszeit()` verwenden und nur die von der Hauptfunktion aufrufen. Die könnte beispielsweise die Eingaben validieren. Und dann ein Verbundobjekt (`collections.namedtuple()`) zurück geben bei dem die Gesamtzeit auch gleich als Element/Attribut ausgerechnet existiert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

#!/usr/bin/env python3
import csv
import time
from datetime import datetime, timedelta
from collections import namedtuple

def main():
    xyz = namedtuple('arbeitstag', 'Kommission Ort Eintrag Arbeitszeit Pause Chef')
    xy = namedtuple('auftraggeber', 'Hofmeister Röck Binsch')
    auftraggeber = input('Auftraggeber (h/r/b) : ')
    kommission = input('Kommission : ')
    if kommission == 'rekla':
        rekla_kommissionen = input('Kommissionen : ')
    else:
        rekla_kommissionen = ''
    ort = input('Ort : ')
    chef = input('Chef : ')
    rekla = input('Reklamation (ja/ ) : ')
    if rekla == 'ja':
        grund = input('Kommission, Begründung der Reklamationen : ')
    else:
        grund = ''
    start = input('Arbeitsbeginn : ')
    ende = input('Arbeitsende : ')
    if time_ende < timeobj_start:
        print('Value_Error, Zeitangaben')
        time.sleep(3)
        return
    pause = input('Pause : ')
    test = input('Korrekte Eingaben? (JA) : ')
    if test != 'JA':
        return
    if auftraggeber == 'h': auftraggeber = 'Hofmeister'
    if auftraggeber == 'r': auftraggeber = 'Röck'
    if auftraggeber == 'b': auftraggeber = 'Binsch'
    time_ende = datetime.strptime(ende, "%H:%M")
    timeobj_start = datetime.strptime(start, "%H:%M")
    timeobj_start = datetime.strptime(start, "%H:%M")
    time_pause = datetime.strptime(pause, "%H:%M")
    time_zeit = time_ende - time_start - time_pause
    sekunden = timedelta.total_seconds(time_zeit)
    stunden = sekunden / 60 / 60
    zeit = str(stunden)
    zeitpunkt = time.strftime('%d.%m.%Y__%H:%M:%S')
    str_zeit = str(time_zeit)[:-3]
    eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
        f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
        f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
        f'Du hast {str_zeit} Stunden gearbeitet\n\n'
    )
    rekla_eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
        f'Du hast {str_zeit} Stunden gearbeitet\nReklamationen: {grund}\n\n'
    )
    list_eintrag = [kommission, ort, zeitpunkt, zeit, pause, chef]
    rekla_tag_eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} Reklamationen im {ort} erledigen.\n'
        f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
        f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
        f'Du hast {str_zeit} Stunden gearbeitet,'
        f' du warst wieder bei Kommission {rekla_kommissionen}\n'
        f'Reklamationen: {grund}\n\n'
    )
        if kommission == 'rekla':
            with open('Arbeitszeitnachweis.txt', 'a', encoding='utf-8') as file:
                file.write(rekla_tag_eintrag)
        else:
            with open('Arbeitszeitnachweis.txt', 'a', encoding='utf-8') as file:
                file.write(eintrag)
        with open('Arbeitsstunden.csv', 'a', encoding='utf-8') as csv_file:
            writer = csv.writer(csv_file, delimiter=';')
            writer.writerow(list_eintrag)
        if rekla == 'ja':
            with open('Reklamationen.txt', 'a', encoding='utf-8') as file:
                file.write(rekla_eintrag)

if __name__ == '__main__':
    main()

### Kommentare ###
# Verschiedene Touren

was bringt mir die tuple? wieso muss ich nochmal auf die liste zugreifen?
die werte in der tuple existieren doch noch gar nicht ich blick nicht was mir das in meinem skript bringen soll

ich weis auch nicht wie ich du willst das ich das skript umschreibe meiner meinung nach stehten im oberen teil
die Benutzereingaben, in der Mitte kommt der Prozess und am Ende werden die dateien geschrieben


das ich die zwei mega texte kombinieren soll hört sich gut an nur weis ich nicht wie^^
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Da ist was falsch eingerückt und durch das umsortieren der Zeilen ist auch nicht alles definiert bevor damit etwas gemacht werden soll.

Die `namedtuple()` bringen Dir so gar nichts, Du verwendest sie ja auch nicht. Die Tupel-Typen würde man auch ausserhalb der Funktion auf Modulebene erstellen und wie Klassen benennen und der Name ist üblicherweise gleich dem Namen den man als erstes Argument angibt. Der zweite so erstellte Typ macht keinen Sinn, denn der Auftraggeber ist ja kein zusammengesetzter Wert, sondern einfach nur ein Name. Die üblichen Namenskonventionen gelten auch für `namedtuple()`-Exemplare – der Typname in MamelCase und die Attributnamen klein_mit_unterstrichen.

Die würden was bringen wenn man das auf Funktionen aufteilen würde → man würde nicht so viele Einzelwerte in der Gegend herum reichen müssen. Aber mach halt weiter mit *einer* Funktion die *alles* macht, alles auf einzelne Namen verteilt und davon 27 Stück verwendet und über 50 Anweisungen in 70 Zeilen enthält. Mir ist das alles deutlich zu viel und jetzt schon zu unübersichtlich, und da ist noch so gut wie keine Fehlerbehandlung drin.

Die Umsortierung der Zeilen macht es übrigens nicht besser. Die Trennung zwischen Eingabe und Verarbeitung bedeutet nicht das im ersten Teil (Eingabe) nur das gemacht werden darf was der Benutzer direkt per `input()` eingibt. Da gehört auch die Validierung und Umwandlung der Eingaben in Werte/Typen dazu, die dann von der Verarbeitung benötigt werden. Wie schon gesagt, braucht man dann auch gewisse Werte nicht in verschiedenen Formen an verschiedene Namen binden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Dazu musst du mir ein beispiel geben ich seh nicht so recht vor mir was du meinst..
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

hab das ganze mal gesplittet und mit der zeit angefangen..läuft nicht so ganz^^

Code: Alles auswählen

auftraggeber = input('Auftraggeber (h/r/b) : ')
if auftraggeber != 'h' or 'r' or 'b': #f
    print('value_error, falsche eingabe')
if auftraggeber == 'h': auftraggeber = 'Hofmeister'
if auftraggeber == 'r': auftraggeber = 'Röck'
if auftraggeber == 'b': auftraggeber = 'Binsch'

Code: Alles auswählen

import locale
import time
from datetime import datetime, timedelta

start = input('Arbeitsbeginn : ')
ende = input('Arbeitsende : ')
pause = input('Pause : ')
time_start = datetime.strptime(start, '%H:%M')
time_ende = datetime.strptime(ende, '%H:%M')
if time_ende < time_start:
    print('Value_Error, Zeitangaben')
    time.sleep(3)
    exit()
locale.setlocale(locale.LC_ALL, 'german')
time_pause = datetime.strptime(pause, '%H:%M')
z_zeit = time_ende - time_start
z_zeit = str(z_zeit)
time_zeit = datetime.strptime(z_zeit, '%H:%M') #f
total_sekunden = timedelta.total_seconds(time_zeit)
minuten = total_sekunden / 60
stunden = minuten / 60
pause_sekunden = timedelta.total_seconds(time_pause)
arbeitszeit_sekunden = total_sekunden - pause_sekunden
arbeitszeit = arbeitszeit_sekunden / 60 / 60
format_zeit = locale.format_string('%f', arbeitszeit)
zeit = str(format_zeit)[:-4]

Code: Alles auswählen

kommission = input('Kommission : ')
if kommission == 'rekla':
    rekla_kommissionen = input('Kommissionen : ')
else:
    rekla_kommissionen = ''

Code: Alles auswählen

ort = input('Ort : ')
chef = input('Chef : ')

Code: Alles auswählen

rekla = input('Reklamation (ja/ ) : ')
if rekla == 'ja':
    grund = input('Kommission, Begründung der Reklamationen : ')
else:
    grund = ''

Code: Alles auswählen

eintrag = (
    f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
    f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
    f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
    f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
    f'Du hast {str_zeit} Stunden gearbeitet\n\n'
)
rekla_eintrag = (
    f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
    f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
    f'Du hast {str_zeit} Stunden gearbeitet\nReklamationen: {grund}\n\n'
)
list_eintrag = [kommission, ort, zeitpunkt, zeit, pause, chef]
rekla_tag_eintrag = (
    f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
    f'Du warst heute mit {chef} Reklamationen im {ort} erledigen.\n'
    f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
    f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
    f'Du hast {str_zeit} Stunden gearbeitet,'
    f' du warst wieder bei Kommission {rekla_kommissionen}\n'
    f'Reklamationen: {grund}\n\n'
)

Code: Alles auswählen

if kommission == 'rekla':
    with open('Arbeitszeitnachweis.txt', 'a', encoding='utf-8') as file:
        file.write(rekla_tag_eintrag)
else:
    with open('Arbeitszeitnachweis.txt', 'a', encoding='utf-8') as file:
        file.write(eintrag)
with open('Arbeitsstunden.csv', 'a', encoding='utf-8') as csv_file:
    writer = csv.writer(csv_file, delimiter=';')
    writer.writerow(list_eintrag)
if rekla == 'ja':
    with open('Reklamationen.txt', 'a', encoding='utf-8') as file:
        file.write(rekla_eintrag)
Zuletzt geändert von Pad385 am Samstag 20. April 2019, 16:58, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Pad385: was heißt denn, „läuft nicht so ganz“?

›or‹ darf nicht mit einem umgangssprachlichen „oder” gleichgesetzt werden.
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

import locale
import time
from datetime import datetime, timedelta

start = input('Arbeitsbeginn : ')
ende = input('Arbeitsende : ')
pause = input('Pause : ')
time_start = datetime.strptime(start, '%H:%M')
time_ende = datetime.strptime(ende, '%H:%M')
if time_ende < time_start:
    print('Value_Error, Zeitangaben')
    time.sleep(3)
    exit()
locale.setlocale(locale.LC_ALL, 'german')
time_pause = datetime.strptime(pause, '%H:%M')
z_zeit = time_ende - time_start
z_zeit = str(z_zeit)
time_zeit = datetime.strptime(z_zeit, '%H:%M') #f
total_sekunden = timedelta.total_seconds(time_zeit)
pause_sekunden = timedelta.total_seconds(time_pause)
arbeitszeit_sekunden = total_sekunden - pause_sekunden
arbeitszeit = arbeitszeit_sekunden / 60 / 60
format_zeit = locale.format_string('%f', arbeitszeit)
zeit = str(format_zeit)[:-4]
Arbeitsbeginn : 6:15
Arbeitsende : 18:00
Pause : 1:00
Traceback (most recent call last):
File "./arbeitszeit_erfragen.py", line 18, in <module>
time_zeit = datetime.strptime(z_zeit, '%H:%M') #f
File "C:\Users\phili\AppData\Local\Programs\Python\Python37\lib\_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\phili\AppData\Local\Programs\Python\Python37\lib\_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: :00

und die pause muss ich auch noch irgendwie abziehen hoffe das klappt so wie ich mir das vorstelle oder bin ich auf m Holzweg?
Sirius3 hat geschrieben: Samstag 20. April 2019, 16:57
›or‹ darf nicht mit einem umgangssprachlichen „oder” gleichgesetzt werden.
da war autoit einfacher^^
Zuletzt geändert von Pad385 am Sonntag 21. April 2019, 13:27, insgesamt 2-mal geändert.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Das verwundert ja nun nicht, dass man die Stringdarstellung eines TimeDelta nicht als Zeit parsen kann. Wenn man liest, was Du Dir da zusammengeraten hast, macht das auch wenig Sinn: Du wandelst eine TimeDelta-Objekt in einen String um, parst das als Datetime-Objekt um dieses dann wieder als Timedelta-Objekt zu verwenden. Neben dem, dass das einmal im Kreis drehen nicht so funktioniert, wie Du Dir das erhoffst, ist es auch noch unnötig, weil Du ja schon im ersten Schritt ein Timedelta-Objekt hast.
`timedelta.total_seconds` mit irgendeinem Objekt aufzurufen, und zu hoffen, dass Python schon richtig raten kann, was Du möchtest, ist auch sehr optimistisch.

Start- und Ende-Zeit kannst Du als Zeitpunkte mit Datetime.strptime parsen und als Timedelta verrechnen. Aber die Pause ist eine Zeitdauer, für die es in der Standardbibliothek von Python keinen Parser gibt, den mußt Du selbst schreiben.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Die Werte für das zweite Argument von `setlocale()` sind nicht portabel. Die einzigen Werte die man da sicher verwenden kann sind die leere Zeichenkette, 'C' und 'POSIX'. 'german' funktioniert bei mir beispielsweise nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

import locale
import time
from datetime import datetime, timedelta

start = input('Arbeitsbeginn : ')
ende = input('Arbeitsende : ')
pause = input('Pause : ')
time_start = datetime.strptime(start, '%H:%M')
time_ende = datetime.strptime(ende, '%H:%M')
time_pause = datetime.strptime(pause, '%H:%M')
if time_ende < time_start:
    print('Value_Error, Zeitangaben')
    time.sleep(3)
    exit()
time_zeit = time_ende - time_start
time_pause = time_pause - timedelta(hours=0, minutes=0)
total_sekunden = timedelta.total_seconds(time_zeit)
pause_sekunden = timedelta.total_seconds(time_pause)
locale.setlocale(locale.LC_ALL, '')
arbeitszeit_sekunden = total_sekunden - pause_sekunden
arbeitszeit = arbeitszeit_sekunden / 60 / 60
format_zeit = locale.format_string('%f', arbeitszeit)
zeit = str(format_zeit)[:-4]
print(zeit)

währe es vielleicht sinnvoller oder leichter die pause nicht in 1:00 anzugeben sondern in 1,0 ?
wie sieht so ein parser aus?! was er machen soll ist mir hoffentlich klar, die pause in eine timedelta umwandeln ?
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

auftraggeber = input('Auftraggeber (h/r/b) : ')
if auftraggeber.lower() not in ('h', 'r', 'b'):
    print('value_error, falsche eingabe')
if auftraggeber == 'h': auftraggeber = 'Hofmeister'
if auftraggeber == 'r': auftraggeber = 'Röck'
if auftraggeber == 'b': auftraggeber = 'Binsch'
print(auftraggeber)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum postest Du die ganze Zeit fehlerhaften Code, der nicht läuft? Warum schreibst Du nicht wenigstens dazu, an welcher Stelle das nicht funktioniert? Warum das nicht funktioniert, habe ich Dir ja schon öfter mal geschrieben.

Da das hier nix mehr wird:

Code: Alles auswählen

def parse_timedelta(time):
    hours, minutes = map(int, time.split(':'))
    if not 0 <= minutes <= 60:
        raise ValueError('wrong time format')
    return timedelta(seconds = (hours*60 + minutes) * 60)

time_start = datetime.strptime(start, '%H:%M')
time_ende = datetime.strptime(ende, '%H:%M')
time_pause = parse_timedelta(pause)
if time_ende < time_start:
    print('Startuhrzeit größer als Enduhrzeit')
    return
time_zeit = time_ende - time_start
arbeitszeit_sekunden = (time_zeit - time_pause).total_seconds()
hours, minutes = divmod(int(arbeitszeit_sekunden) // 60, 60)
zeit = "{:02d}:{02d}".format(hours, minutes)
print(zeit)
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

jetzt weis ich auch wie das mit den Funktionen abläuft danke
nun dazu:

Code: Alles auswählen

    eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
        f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
        f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
        f'Du hast {zeit} Stunden gearbeitet\n\n'
    )
    rekla_eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
        f'Du hast {zeit} Stunden gearbeitet\nReklamationen: {grund}\n\n'
    )
    list_eintrag = [kommission, ort, zeitpunkt, zeit, pause, chef]
    rekla_tag_eintrag = (
        f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
        f'Du warst heute mit {chef} Reklamationen im {ort} erledigen.\n'
        f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
        f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
        f'Du hast {zeit} Stunden gearbeitet,'
        f' du warst wieder bei Kommission {rekla_kommissionen}\n'
        f'Reklamationen: {grund}\n\n'
das soll ich jetzt irgendwie mit ner tuple lösen richtig?

Code: Alles auswählen

Arbeitstag = namedtuple(
    'Arbeitstag', 'Kommission Ort Eintrag Arbeitszeit Pause Chef'
)
wie soll ich die jetzt verwenden damit die einträge zu erstellen sind ?
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

    Arbeitstag = namedtuple(
        'Arbeitstag', 'kommission rekla_kommissionen ort zeitpunkt start ende zeit pause chef grund auftraggeber'
    )
sollte die dann nicht so aussehen ? ich versteh nicht so ganz wie ich da mein input reinbekomme und ich wie
ich alles dann noch wieder verwenden soll aber vielleicht ist es auch schon zu spät für heute..^^
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Der aller erste Schritt, den Du seit Wochen hier ignorierst und nicht umsetzt, ist, dass Du die Texte nur dann wenn sie gebraucht werden und nur dort, wo sie gebraucht werden, erzeugen sollst.
Mir und Dir und keinem hier ist nämlich klar, unter welchen Bedingungen welche der Variablen rekla, rekla_kommission und kommission gesetzt sein müssen.

Zu Deinen Auftraggebern, schau Dir mal Wörterbücher an und überlege Dir, wie man die if durch den Einsatz eines Wörterbuches vermeiden kann.
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

na schön das ganze läuft so ab man montiert an einem tag bei der Kommission Peter eine Küche jetzt kann es sein das irgendwas kaputt ist dann muss man das als rekla aufnehmen und irgendwann wenn es sich lohnt diese Reklas an einem Tag zu erledigen fährt man einen Reklamationstag also schreibt man bei Kommission "rekla" rein und wenn der für mehrere Kommissionen geplant wurde muss man auch mehrere Kommissionen eingeben können daher rekla_kommissionen
Zu Deinen Auftraggebern, schau Dir mal Wörterbücher an und überlege Dir, wie man die if durch den Einsatz eines Wörterbuches vermeiden kann
okay

meinst du so mir nur dann erzeugen wenn sie gebraucht werden ?

Code: Alles auswählen

    if kommission != 'rekla':
        eintrag = (
            f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
            f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
            f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
            f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
            f'Du hast {zeit} Stunden gearbeitet\n\n'
        )
    else:
        rekla_tag_eintrag = (
            f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
            f'Du warst heute mit {chef} Reklamationen im {ort} erledigen.\n'
            f'Du hast um {start} Uhr angefangen und um {ende} Uhr Feierabend'
            f' gemacht, dazwischen hast du {pause} Stunde(n) Pause gemacht.\n'
            f'Du hast {zeit} Stunden gearbeitet,'
            f' du warst wieder bei Kommission {rekla_kommissionen}\n'
            f'Reklamationen: {grund}\n\n'
        )
    if rekla == 'ja':
        rekla_eintrag = (
            f'Zeitpunkt des Eintrags: {zeitpunkt}   {auftraggeber}\n'
            f'Du warst heute mit {chef} in {ort} bei der Kommission {kommission}.\n'
            f'Du hast {zeit} Stunden gearbeitet\nReklamationen: {grund}\n\n'
        )
    list_eintrag = [kommission, ort, zeitpunkt, zeit, pause, chef]
Pad385
User
Beiträge: 39
Registriert: Dienstag 12. März 2019, 18:33

Code: Alles auswählen

dic = {'h':'Hofmeister', 'r':'Röck', 'b':'Binsch'}
auftraggeber = input('Auftraggeber (h/r/b) : ')
if auftraggeber.lower() not in ('h', 'r', 'b'):
    print('value_error, falsche eingabe')
if auftraggeber in dic: auftraggeber = dic[auftraggeber]
print(auftraggeber)
da könnte man glaub auch ein else: statt .lower() benutzen also:

Code: Alles auswählen

dic = {'h':'Hofmeister', 'r':'Röck', 'b':'Binsch'}
auftraggeber = input('Auftraggeber (h/r/b) : ')
if auftraggeber in dic:
    auftraggeber = dic[auftraggeber]
else:
    print('value_error, falsche eingabe')
print(auftraggeber)
Antworten