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:
#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)
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")
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)+" €")