Wie Programmiere ich einen Bahnpreisrechner in Python?

2 Antworten

Um einen Bahnpreisrechner in Python zu programmieren, der die genannten preislichen Voraussetzungen berücksichtigt, kannst du wie folgt vorgehen:

  1. Zuerst definierst du eine Funktion, die die Eingabe der Kilometeranzahl annimmt.
  2. Danach berechnest du den Preis basierend auf den genannten Bedingungen:
  • Die ersten 20 km sind in der Pauschale enthalten.
  • Für Fahrten bis 150 km wird pro angefangenem 10-km-Block über 20 km hinaus 1,50 € berechnet.
  • Für alle Kilometer über 150 km wird 0,10 €/km berechnet.

Hier ist ein Beispielcode für den Bahnpreisrechner:

def berechne_bahnpreis(kilometer):
    # Grundpreis für die ersten 20 km
    grundpreis = 3.50
    preis = grundpreis

    if kilometer <= 20:
        return preis
    elif kilometer <= 150:
        # Kilometer über 20 km
        zusaetzliche_km = kilometer - 20
        # Anzahl der 10-km-Blöcke (aufgerundet)
        bloecke = (zusaetzliche_km + 9) // 10
        preis += bloecke * 1.50
    else:
        # Für die ersten 150 km (bis zu 130 km über die ersten 20 km hinaus)
        zusaetzliche_km = 150 - 20
        bloecke = (zusaetzliche_km + 9) // 10
        preis += bloecke * 1.50
        # Für Kilometer über 150 km
        weitere_km = kilometer - 150
        preis += weitere_km * 0.10

    return preis

# Beispielaufruf
kilometer = float(input("Geben Sie die gefahrenen Kilometer ein: "))
preis = berechne_bahnpreis(kilometer)
print(f"Der Preis für {kilometer} km beträgt {preis:.2f} €.")
Erklärung:
  • Grundpreis: Die ersten 20 km kosten pauschal 3,50 €.
  • Kilometer 21 bis 150: Jeder angefangene 10-km-Block kostet 1,50 €.
  • Kilometer über 150: Jeder zusätzliche Kilometer kostet 0,10 €.

Dieser Code sollte den gewünschten Preis basierend auf den eingegebenen Kilometern korrekt berechnen.

Kannst es auch so machen:

ceil(x) : kleinste ganze Zahl größer gleich x

from math import ceil

def calc_price(distance):
    if distance > 150:
        return 23 + 0.1*(distance-150)
    elif distance > 20:
        return 3.5 + ceil((distance-20)/10)*1.5
    return 3.5