Python :: Aufgabe #310
5 Lösungen
Berechnung Kfz-Steuer (Deutschland 2021)
Anfänger - Python
von JKooP
- 15.12.2020 um 19:35 Uhr
Schreibe eine Methode/Funktion, mit der es möglich ist, die Kfz- Steuer sowohl für Benzin-, als auch Dieselfahrzeuge
ab dem 01.01.2021 für Deutschland zu berechnen.
Übergeben werden sollen die Parameter: Otto- o. Dieselfahrzeug, Hubraum in ccm, CO2 in g.
Als Ergebnis soll die Gesamtsteuer in Euro fürs Jahr ausgegeben werden.
Eine ausführliche Berechnungshilfe findet man hier!
Viel Spaß
ab dem 01.01.2021 für Deutschland zu berechnen.
Übergeben werden sollen die Parameter: Otto- o. Dieselfahrzeug, Hubraum in ccm, CO2 in g.
Als Ergebnis soll die Gesamtsteuer in Euro fürs Jahr ausgegeben werden.
Eine ausführliche Berechnungshilfe findet man hier!
Viel Spaß
Lösungen:
Python-Code
#310 KFZ Steuer def ausstoss(): global steueranteil if c < 95: steueranteil = 0 elif 96 < c < 115: steueranteil = 2.0*(c-95) elif 116 < c < 135: steueranteil = 2.2*(c-95) elif 136 < c < 155: steueranteil = 2.5*(c-95) elif 156 < c < 175: steueranteil = 2.9*(c-95) elif 176 < c < 195: steueranteil = 3.4*(c-95) else : steueranteil = 4.0*(c-95) for i in range(0,4): mo = str(input("Geben Sie 'Otto' oder 'Diesel'ein:")) hub = float(input("Geben Sie den Hubraum in ccm ein:")) c = int(input("Geben Sie den CO2 Austoss in g/km ein:")) if mo == 'Otto': steuer = hub/100*2.0 ausstoss() print("Steuer:",steuer + steueranteil,"Euro") elif mo == 'Diesel': steuer = hub/100*9.5 ausstoss() print("Steuer:",steuer + steueranteil,"Euro") else: print("Falsche Eingabe")
Mein Ziel beim Programmieren der Funktion war es, dass die CO2-Preistabelle leicht geändert oder erweitert werden kann.
Python-Code
import math def kfz_steuer_2021(fahrzeugtyp, hubraum, co2_ausstoss): # Berechnung der Hubraum-Steuer hubraum_preistabelle = {'otto': 2, 'diesel': 9.5} hubraum_steuer = 0 if hubraum > 0: hubraum_preis = hubraum_preistabelle[fahrzeugtyp] hubraum_steuer = math.ceil(hubraum / 100) * hubraum_preis # Berechnung der CO2-Steuer co2_preistabelle = [ [96, 2], [116, 2.2], [136, 2.5], [156, 2.9], [176, 3.4], [196, 4], ] co2_steuer = 0 for zeile in range(0, len(co2_preistabelle)): co2_preisstufe = co2_preistabelle[zeile][0] co2_preis = co2_preistabelle[zeile][1] if co2_ausstoss >= co2_preisstufe: if zeile < len(co2_preistabelle) - 1: # alle Zeilen außer der letzten co2_preis_max = co2_preistabelle[zeile + 1][0] - co2_preistabelle[zeile][0] co2_menge = min(co2_ausstoss - (co2_preisstufe - 1), co2_preis_max) else: # letzte Zeile co2_menge = co2_ausstoss - (co2_preisstufe - 1) co2_steuer += co2_menge * co2_preis # Berechnung der kompletten KFZ-Steuer kfz_steuer_komplett = round(hubraum_steuer + co2_steuer, 2) # Ausgabe zur Kontrolle # print('Hubraum-Steuer:', hubraum_steuer, '€') # print('CO2-Steuer:', co2_steuer, '€') # print('KFZ-Steuer komplett:', kfz_steuer_komplett, '€') return kfz_steuer_komplett # Berechnungs-Beispiel Volvo XC 90 B5 kfz_steuer_2021('diesel', 1969, 158)
Python-Code
import math from functools import lru_cache from typing import Literal # to prevent wrong parameters # pip install strongtyping from strongtyping.strong_typing import match_typing # Config dict for price per started 100 cc pp_ccm = { 'Otto': 2.00, 'Diesel': 9.50 } # Config dict for co2 price in different sectors price_co2 = { (96, 115): 2.00, (116, 135): 2.20, (136, 155): 2.50, (156, 175): 2.90, (176, 195): 3.40, (195, -1): 4.00, # -1 used as no upper limit } @lru_cache @match_typing def calc_kfz_tax(kfz_type: Literal['Diesel', 'Otto'], ccm: int, co2_g: int) -> float: """ :return: total tax for a year in Euro """ price_cc = math.ceil(ccm / 100) * pp_ccm[kfz_type] if co2_g <= 95: total_tax = price_cc elif co2_g > 195: total_co2 = sum(((k[1] - k[0]) + 1) * v if k[0] < 195 else (co2_g - k[0]) * v for k, v in price_co2.items()) total_tax = price_cc + total_co2 else: total_co2 = 0 for k, v in price_co2.items(): if co2_g <= k[1]: total_co2 += ((co2_g - k[0]) + 1) * v break elif k[1] < co2_g: total_co2 += ((k[1] - k[0]) + 1) * v total_tax = price_cc + total_co2 return total_tax
2.Versuch
Python-Code
def ausstoss(): global steueranteil if c <= 95: steueranteil = 0 elif 96 <= c <= 115: steueranteil = 2.0*(c-95) elif 116 <= c <= 135: steueranteil = 2.2*(c-115)+40 elif 136 <= c <= 155: steueranteil = 2.5*(c-135)+40+44 elif 156 <= c <= 175: steueranteil = 2.9*(c-155)+40+44+50 elif 176 <= c <= 195: steueranteil = 3.4*(c-175)+40+44+50+58 else : steueranteil = 4.0*(c-195)+40+44+50+58+68 for i in range (0,4): mo = str(input("Geben Sie 'Benzin' oder 'Diesel'ein:")) hub = float(input("Geben Sie den Hubraum in Liter ein:")) c = int(input("Geben Sie den CO2 Austoss in g/km ein:")) if mo == 'Benzin': steuer = round (hub,1)/0.1*2.0 ausstoss() print("Steuer:",steuer + steueranteil,"Euro") elif mo == 'Diesel': steuer = round (hub,1)/0.1*9.5 ausstoss() print("Steuer:",steuer + steueranteil,"Euro") else: print("Falsche Eingabe")
Python-Code
print("Willkommen im Rechner für die KFZ-Steuer 2021") #Treibstoffart while True: print("Welchen Treibstoff verwendet ihr Auto?") print("Für Benzin geben Sie drücken Sie [b]") print("Für Diesel drüken Sie [d]") treibstoff = input("> ") print(treibstoff) if treibstoff is not "b": if treibstoff is not "d": print("falsche Eingabe") else: break else: break #Hubraum while True: hubraum = input("Geben Sie den Hubraum ihres Autos in ccm ein: > ") try: int(hubraum) except: ValueError: print("falsche Eingabe") else: hubraum = int(hubraum) break #CO2-Ausstoss while True: co2 = input("Geben Sie den den Co2-Ausstoss in g pro km Ihres Autos ein: > ") try: int(co2) except: ValueError: print("falsche Eingabe") else: co2 = int(co2) break #Berechnung Kosten Hubraum kosten_CO2 = 0 kosten_ccm = 0 co2_limit = 195 klasse=0 preis = 4 while co2_limit > 75: if int(co2) > co2_limit: kosten_CO2 += (co2 % co2_limit) * preis co2 = co2 - (co2 % co2_limit) co2_limit -= 20 preis = preis - (0.6 - klasse*0.1) klasse += 1 else: co2_limit -= 20 preis = preis - (0.6 - (klasse * 0.1)) klasse += 1 print("Die Kosten aufgrund des CO2-Ausstosses belaufen sich auf " + str(kosten_CO2)+" €") #Berechnung Kosten CO2 if treibstoff =="b": kosten_ccm+=2*round((hubraum+49)/100) else: kosten_ccm += 9.5 * round((hubraum + 49) / 100) print("Die Kosten aufgrund des Hubraums belaufen sich auf " + str(kosten_ccm)+" €") #Ausgabe Gesamtkosten print("Sie Zahlen also insgesamt: " + str(kosten_CO2+kosten_ccm)+" €")