Python: Kann man die if-Anweisungen verkürzen?

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.

Woher ich das weiß:Studium / Ausbildung

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