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
![](https://images.gutefrage.net/media/user/xxxcyberxxx/1691185806883_nmmslarge__0_0_1230_1230_4dfa4fbf5df5051b1dd22ccc1781adca.png?v=1691185807000)
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
![](https://images.gutefrage.net/media/user/QuietMaths/1709635111133_nmmslarge__0_0_1024_1024_3ee6d102f9fff3b8eb89a9336cca61ab.jpg?v=1709635111000)
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.
![](https://images.gutefrage.net/media/user/tide1109/1568022372988_nmmslarge__1179_667_2597_2597_5d90cc1a685fa94406cd63e940354bf2.jpg?v=1568022373000)
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.
![](https://images.gutefrage.net/media/user/Kreasteve/1549907211360_nmmslarge__198_0_693_693_4414c15c41e45323101da0045847e66d.jpg?v=1549907211000)
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")
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
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