Python :: Aufgabe #310

4 Lösungen Lösungen öffentlich

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ß

Lösungen:

2 Kommentare
vote_ok
von Willi (210 Punkte) - 23.12.2020 um 10:21 Uhr
Quellcode ausblenden 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")
vote_ok
von Magneto (40 Punkte) - 30.12.2020 um 20:29 Uhr
Mein Ziel beim Programmieren der Funktion war es, dass die CO2-Preistabelle leicht geändert oder erweitert werden kann.

Quellcode ausblenden 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)
2 Kommentare
1x
vote_ok
von felixTheC (270 Punkte) - 30.12.2020 um 20:45 Uhr
Quellcode ausblenden 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


vote_ok
von Willi (210 Punkte) - 04.01.2021 um 15:28 Uhr
2.Versuch

Quellcode ausblenden 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")