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: 13079
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: 17741
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: 17741
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: 13079
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: 17741
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: 17741
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)
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pad385: Wenn der Benutzer eine ungültige Eingabe für den Auftraggeber macht, dann wird `auftraggeber` nicht definiert, aber in der letzten Zeile versucht diese nicht definierte Variable auszugeben. `dic` ist auch kein sinnvoller Name. Abkürzungen in der Regel sowieso nicht, aber hier kommt noch dazu das den Leser nicht interessiert was das für ein Datentyp ist, sondern was dieses Wörterbuch im Kontext des Programms bedeutet.

Bei der Ausgabe des Eingabeaufforderung sind die Schlüssel des Wörterbuchs noch einmal manuell in die Zeichenkette geschrieben worden – die könnte/sollte man sich aus dem Wörterbuch holen um unnötige Arbeit und mögliche Fehler bei Programmänderungen zu vermeiden. Mindestens solange die Anfangsbuchstaben eindeutig sind, kann man die auch aus den Namen generieren, das heisst auch im Wörterbuch muss man die nicht selbst hin schreiben, sondern kann sie aus den Namen ermitteln.
„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

Wenn der Benutzer eine ungültige Eingabe für den Auftraggeber macht, dann wird `auftraggeber` nicht definiert, aber in der letzten Zeile versucht diese nicht definierte Variable auszugeben.
weil das skript beendet wird habe ich bei dem schnipsel nur nicht angefügt
Bei der Ausgabe des Eingabeaufforderung sind die Schlüssel des Wörterbuchs noch einmal manuell in die Zeichenkette geschrieben worden – die könnte/sollte man sich aus dem Wörterbuch holen um unnötige Arbeit und mögliche Fehler bei Programmänderungen zu vermeiden. Mindestens solange die Anfangsbuchstaben eindeutig sind, kann man die auch aus den Namen generieren, das heisst auch im Wörterbuch muss man die nicht selbst hin schreiben, sondern kann sie aus den Namen ermitteln.
waaaas? da weis ich jetzt nicht was du meinst der Auftraggeber ist doch variabel wie kann ich den dann aus nem Wörterbuch ziehen?
und wie soll ich 'h' dann 'Hofmeister' zuweisen wenn ich das nicht ins Wörterbuch schreiben soll ?!

so mal das ganze funktionierende Skript:

Code: Alles auswählen

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

def main():
    dic_auftraggeber = {'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')
        return
    if auftraggeber in dic_auftraggeber:
        auftraggeber = dic_auftraggeber[auftraggeber]
    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 : ')
    pause = input('Pause : ')
    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')
        exit()
    locale.setlocale(locale.LC_ALL, '')
    time_zeit = time_ende - time_start
    arbeitszeit_sekunden = (time_zeit - time_pause).total_seconds()
    hours, minutes = divmod(int(arbeitszeit_sekunden) // 60, 60)
    minutes = minutes / 60
    format_zeit = hours + minutes
    zeit = locale.format_string('%f', format_zeit)
    zeit = str(zeit)[:-4]
    test = input('Korrekte Eingaben? (JA) : ')
    if test != 'JA':
        return
    zeitpunkt = time.strftime('%d.%m.%Y__%H:%M:%S')
    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'
    )
    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)

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)

if __name__ == '__main__':
    main()
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du SOLLST das ins Wörterbuch schreiben. Du sollst es NICHT hart kodieren was in den Antwortmöglichkeiten steht. Sondern auch das aus dem Wörterbuch erstellen.

Code: Alles auswählen

 “, “.join(d.keys())
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und beim zweiten Teil der Bemerkung war gemeinst das Du das auch nicht im Wörterbuch hart kodierst, denn das Wörterbuch selbst kann man ja nur aus den Namen erstellen.
„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

>>> dic = {'h':'Hofmeister', 'r':'Röck', 'b':'Binsch'}
>>> test = ', '.join(dic.keys())
>>> print(test)
h, r, b
>>> 
was bringt mir das dann ? mit h, r, b kann ich nichts anfangen..
das Wörterbuch aus welchen namen erstellen?
und WAS soll ich ins Wörterbuch schreiben ist das etwa falsch ?

Code: Alles auswählen

dic = {'h':'Hofmeister', 'r':'Röck', 'b':'Binsch'}
Antworten