@Pad385: Da sind viel zu viele `str()`-Aufrufe.
Wenn das Python 2 ist, dann werden Zeichenketteneingaben mit `input()` so nicht wirklich sinnvoll funktionieren, denn dafür gibt es die `raw_input()`-Funktion. Das sollte aber kein Python 2 sein, denn das läuft Ende dieses Jahres aus. Neue Programme sollte man in Python 3 entwickeln.
Da ist dann `input()` richtig. Das liefert eine Zeichenkette und es macht keinen Sinn diese Zeichenkette `str()` zu übergeben, denn dadurch wird die auch nicht ”zeichenkettiger”.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen sollten verraten was der Wert bedeutet und keine unüblichen Abkürzungen enthalten. Wenn `kom` für „Kommission“ stehen soll, dann sollte es auch `kommission` heissen.
`new` sagt nicht wirklich etwas aus über den Wert. Bei der Definition sind auch wieder viel zu viele `str()`-Aufrufe auf den Zeichenketten die alle schon mal durch `str()` gegangen sind. Auch ein zweiter Aufruf ändert nichts daran das eine Zeichenkette eine Zeichenkette ist und bleibt. Auch ein dritter Aufruf beim `write()` der zusammengesetzten Zeichenkette ändert daran nichts.
Allerdings sollte das nicht alles eine Zeichenkette sein, denn von den vier Werten `start`, `ende`, `zeit`, und `pause` kann man mindestens einen ausrechnen statt ihn vom Benutzer abzufragen. Dazu müssten die aber einen passenden Datentyp haben. Etwas aus dem `datetime`-Modul, denn mit den Datentypen dort kann man mit Datums- und Zeitangaben rechnen.
Um daraus dann wieder Zeichenketten zu machen und die mit anderen Zeichenkettenteilen zu verbinden verwendet man in Python nicht ``+`` und `str()` – das ist eher BASIC – sondern Zeichenkettenformatierung mit der `format()`-Methode oder ab Python 3.6 f-Zeichenkettenliterale.
Diese unglaublich lange Zeile sollte man sinnvoll umbrechen.
Beim öffnen von Textdateien sollte man immer eine Kodierung angeben.
`fileStunden` hält sich nicht an die Namenskonvention: alles_klein_mit_unterstrichen ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Es ist auch kein so komischer Name nötig, man kann das auch beim zweiten mal einfach `file` nennen, denn der Name wird ja nicht mehr für die andere Datei verwendet.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import time
def main():
kommission = input('Kommission : ')
ort = input('Ort : ')
chef = input('Chef : ')
#
# TODO Mindestens ein Wert sollte sich aus den anderen berechnen lassen.
# Und eine Überprüfung der Angaben wäre vielleicht sinnvoll, das zum
# Beispiel das Arbeitsende nach dem Arbeitsbeginn liegt.
# Dazu das `datetime`-Modul benutzen.
#
start = input('Arbeitsbeginn : ')
ende = input('Arbeitsende : ')
zeit = input('Arbeitszeit : ')
pause = input('Pause : ')
zeitpunkt = time.strftime('%d.%m.%Y %H:%M:%S')
eintrag = (
f'Zeitpunkt des Eintrags: {zeitpunkt}\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\n'
)
with open('Arbeitszeitnachweis.txt', 'a', encoding='utf-8') as file:
file.write(eintrag)
with open('Arbeitsstunden.txt', 'a', encoding='utf-8') as file:
#
# FIXME Das Datum sollte aus dem aktuellen Zeitstempel kommen der nur
# *einmal* ermittelt wird, sonst kann es vorkommen das um Mitternacht
# herum beide Werte Unterschiedlich sind. Siehe wieder das
# `datetime`-Modul.
#
# TODO Nachdenken ob dieses Format wirklich sinnvoll ist, weil die
# Zusätze 'Stunden' und 'mit' die Weiterverarbeitung unnötig
# erschweren. Und wenn das eine CSV-Datei sein soll, wäre das
# `csv`-Modul angebracht.
#
file.write(f'{time.strftime("%d.%m.%Y")}\t{zeit} Stunden\tmit {chef}\n')
if __name__ == '__main__':
main()