Python: Kann man die if-Anweisungen verkürzen?
Hallo zusammen,
ich habe eine kurze Frage zum Thema Python.
Ich habe folgenden Code geschrieben, welcher mir bei einer bestimmten Eingabe des Nutzers einen Rabatt ausrechnen soll.
Preis = float(input("Nettopreis:"))
Kundendauer = float(input("Kundendauer in Jahren:"))
if Kundendauer >= 2 and Kundendauer < 7:
Preis = Preis * 0.995
if Kundendauer >= 7 and Kundendauer < 8:
Preis = Preis * 0.99
if Kundendauer >= 8 and Kundendauer < 9:
Preis = Preis * 0.985
if Kundendauer >= 9 and Kundendauer < 10:
Preis = Preis * 0.98
if Kundendauer >= 10 and Kundendauer < 11:
Preis = Preis * 0.975
if Kundendauer >= 11 and Kundendauer < 12:
Preis = Preis * 0.97
if Kundendauer >= 12 and Kundendauer < 13:
Preis = Preis * 0.965
if Kundendauer >= 13 and Kundendauer < 14:
Preis = Preis * 0.96
if Kundendauer >= 14 and Kundendauer < 15:
Preis = Preis * 0.955
if Kundendauer >= 15 and Kundendauer < 16:
Preis = Preis * 0.95
print(Preis)
Gibt es eine Möglichkeit, dieses Programm so umzuschreiben, sodass man nicht mehr zehn if-Anweisungen benötigt? Sondern deutlich weniger?
Vielen Dank im Voraus!
5 Antworten
Jeder dieser Cases (bis auf der erste) hat einen Bereich von 1 und verändert den Faktor um 0.005 - nutz einfach das, um eine Formel dafür zu finden.
Für die Variable "Kundendauer" nutzt du dann eben den Integer der Variable
Du kannst hier mit einer Schleife arbeiten
preis = float(input("Nettopreis: "))
kundendauer = float(input("Kundendauer in Jahren: "))
#neue Zeilen Code
#-------------------------
counter = 7
multiplikator = 0.995
#------------------------
if kundendauer >= 2 and kundendauer < 7:
preis = preis * multiplikator
#alter Code umgeformt in eine Schleife
#------------------------------------------------------------
while counter <= 15:
if kundendauer >= counter and kundendauer < (counter + 1):
multiplikator = multiplikator - 0.005
preis = preis * multiplikator
counter = counter + 1
#------------------------------------------------------------
print(preis)
Man erkennt, dass der eine Vergleichsoperator mit jeder if-Anweisung um 1 inkrementiert wird, also um eins vergrößert wird. Der zweite Vergleichsoperator ist einfach der erst nur auch um eins vergrößert.
if kundendauer >= vergleichsoperator and kundendauer < (vergleichsoperator + 1):
...
if kundendauer <= (vergleichsoperator + 1) and kundendauer < ((vergleichsoperator + 1) + 1):
...
...
Deswegen kann man hier mit einer Schleife arbeiten. Außerdem kann man die if-Bedingung theoretisch einfacher machen. Man kann einfach folgendes tun:
if kundendauer == vergleichsoperator:
#Beispiel:
if kundendauer >= 7 and kundendauer <8:
preis = preis * 0.99
#wird zu:
if kundendauer == 7:
preis = preis * 0.99
Du hast in der Zeile
kundendauer = float(input("Kundendauer in Jahren:"))
ja gefordert, dass die Kundendauer in Jahren angegeben wird und deswegen wird der Benutzer keine Dezimalzahlen eingeben.
Ich hoffe ich konnte dir weiterhelfen.
Die Rabatte befolgen einer gewissen Formel, die man umsetzen kann.
Das müsste eine passende Umsetzung sein:
Preis=float(input("Nettopreis:"))
Kundendauer=float(input("Kundendauer in Jahren:"))
Rabatt = 0
if Kundendauer >= 2 and Kundendauer <7:
Rabatt = 0.005
elif Kundendauer >= 2 and Kundendauer <16:
Rabatt = (int(Kundendauer) - 5) * 0.005
elif Kundendauer >= 16:
Rabatt = 0.05
Preis = Preis * (1 - Rabatt)
print(Preis)
Das zweite elif ist dafür da, den maximalen Rabatt auf 5% zu beschränken. Nach deiner Umsetzung würde ein Kunde mit 17 Jahren 0% Rabatt bekommen.
Zur einzelnen Abfrage... Das kann auch so machen:
k=6 #beispiel
if 3<= k < 7:
print("k ist 3 oder größer aber kleiner als 7")
du könntest 2 arrays nehmen , obergrenze und untergrenze
dann ein array mit multiplikator
dann eine schleife drüber und dort ein if reinpacken .
ich mach mal pseudocode den musst du dann noch in python umwandeln
obergrenze = [7,8,9,...]
untergrenze = [2,7,8,...]
multiplikator = [0.995 , 0.99 , 0.985 , ...]
weitersuchen = true;
i = 0
while (weitersuchen)
if Kundendauer >= untergrenze[i] and Kundendauer < obergrenze[i]:
Preis = Preis * multiplikator[i]
weitersuchen = false
if i < ...
i=i+1
else
weitersuchen = false