Ich sitze gerade an einem Programm, dass wie im Titel bereits beschrieben die Wartezeiten von Patienten abfragen und am Ende auch den Mittelwert der Wartezeiten berechnen soll.
Dafür habe ich eine Klasse Time erstellt, die zum Beispiel Zeiten in Sekunden umrechnet, um sie addieren/subtrahieren zu können und auch wieder in die Form Stunde:Minute:Sekunde umwandelt.
In einem Hauptprogramm frage ich den Benutzer wann der Patient die Praxis betreten und verlassen hat, berechne daraus die Wartezeit, und sammle solange die Daten von Patienten in einer Liste bis der Benutzer signalisiert keine mehr eingeben zu müssen.
Problem 1: Die einzelnen Methoden in der Klasse Time funktionieren bis jetzt. Aber so wie ich das sehe habe ich noch nicht so ganz verstanden wie das mit dem Zugriff auf eine Klasse klappt. Ich verstehe nicht den Unterschied zwischen 2 underscores vor einem Methodennamen und 2 davor und 2 dahinter. Wahrscheinlich müsste ja meine Methode "__sum" in der Klasse Time private sein, weshalb beim Beenden der Patientenabfrage im Hauptprogramm die Fehlermeldung kommt.
Problem 2: Seit 2-3 Projekten schleicht es sich bei mir immer wieder ein, dass sich bei prints hinten dran ein "None" einschleicht. Woran kann das liegen?
Problem 3: Ich habe in der Vorlesung gelernt, dass wenn man einen Parameter beim Übergeben an eine Funktion vorher mit einem Sternchen ergänzt, alle gelisteten bzw gegebenen Werte benutzt werden.
Allerdings verstehe ich nicht wie ich in der folgenden Rechnung von der Funktion arithmeticMean in meinem Hauptprogramm wirklich alle Werte nutze. Das Sternchen darf ich dort ja nicht wieder eintragen.
Tut mir Leid für die Wall of Text, aber ich kann mich nie kurz fassen
Tipp: Falls ihr das Programm ausführt, müsst ihr mindestens die Zeiten für 2 Patienten eintragen, weil ich noch nicht implementiert habe, wie er reagiert, wenn er nicht genug Werte zum Berechnen des Mittelwerts hat.
Im Folgenden der Code und schon mal vielen Dank für eventuelle Tipps und Hilfestellungen!
Die Klasse Time:
Code: Alles auswählen
class Time:
def __init__(self, hours=0, minutes=0, seconds=0):
self.__hours = hours
self.__minutes = minutes
self.__seconds = seconds
def __add__(self, time):
seconds = self.__timeInSeconds() + time.__timeInSeconds()
newTime = Time()
newTime.__secondsInTime(seconds)
return newTime
def subtract(self, time):
seconds = self.__timeInSeconds() - time.__timeInSeconds()
newTime = Time()
newTime.__secondsInTime(seconds)
return newTime
def __gt__(self, time):
return self.__timeInSeconds() > time.__timeInSeconds()
def __timeInSeconds(self):
return 3600 * self.__hours + 60 * self.__minutes + self.__seconds
def __secondsInTime(self, tIS):
self.__hours = tIS // 3600
self.__minutes = tIS % 3600
self.__seconds = self.__minutes % 60
self.__minutes = self.__minutes // 60
def __sum(self, *time):
summe = self.__timeInSeconds() + time.__timeinSeconds()
newTime = Time()
newTime.__secondsInTime(summe)
return newTime
def __str__(self):
return str(self.__hours) + ":" + str(self.__minutes) + ":" + str(self.__seconds)
#main
if __name__ == "__main__":
t1 = Time(1, 10, 20)
t2 = Time(1, 10, 20)
t3 = Time(1, 10, 20)
t4 = Time(1, 10, 20)
Code: Alles auswählen
from Time import Time
def erhalteDaten():
patienten= []
ende = 0
while ende != 1:
antwort = input(print("Möchten Sie Patienten der Liste hinzufügen? Ja oder Nein?"))
if antwort == "Ja":
betretenStunde = int(input(print("In welcher Stunde hat der Patient die Praxis betreten?")))
betretenMinute = int(input(print("In welcher Minute?")))
betretenSekunde = int(input(print("In welcher Sekunde?")))
ankunft = Time(betretenStunde, betretenMinute, betretenSekunde)
verlassenStunde = int(input(print("In welcher Stunde hat der Patient die Praxis verlassen?")))
verlassenMinute = int(input(print("In welcher Minute?")))
verlassenSekunde = int(input(print("In welcher Sekunde?")))
austreten = Time(verlassenStunde, verlassenMinute, verlassenSekunde)
listValue = austreten.subtract(ankunft)
patienten.append(listValue)
else:
ende += 1
#print(patienten)
print("Der Mittelwert aller Wartezeiten ist: ", arithmeticMean(patienten[0], patienten[1:]))
def arithmeticMean(value, *morevalues):
summe = __sum(value, morevalues)
middle = summe / len(patienten)
return middle
erhalteDaten()