Code-Problem mit einem Kalkulator

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
andie39
User
Beiträge: 152
Registriert: Dienstag 7. Dezember 2021, 16:32

Moin,

nach langer Zeit habe ich mich mal wieder mit Python geschäftigt und möchte mir einen eBay Rechnung mit Zusätzen der auf mich zugeschnitten ist entwerfen.
Aktuell bin ich nur bei einem Zwischenschritt, aber ich teste immer wieder einmal und habe nun eine Fehlermeldung bei der mir nicht klar ist, was das Problem ist.
Das Programm ist so natürlich noch gar nicht fertig und weitere Dinge werden noch eingebaut:

Hier der Code:

Code: Alles auswählen

import math


def calculator(eBay_category, sales_price, purchasing_price):
    shipping_costs = float(5.00)
    ebay_fee = float()
    ebay_provision = float()
    if eBay_category == 1 and sales_price <= 990.00:
        ebay_fee = 11
    elif eBay_category == 1 and sales_price > 990.00:
        ebay_fee = 2
    elif eBay_category == 2 and sales_price < 200.00:
        ebay_fee = 12
    elif eBay_category == 2 and sales_price > 200.00:
        ebay_fee = 2

    ebay_provision = sales_price - (sales_price / 100 * ebay_fee) + 0.35
    net_sales = (sales_price / 1.19) - ebay_provision - shipping_costs
    return net_sales


eBay_category = int()
shipping_costs = float()
sales_price = float()
purchasing_price = float()

print("""Kostenkalkulator für eBay und Webseiten

Wählen Sie Ihre eBay Verkaufskategorie""")

eBay_category = input("Drücke (1) für Bootssport\nDrücke (2) für Gartentechnick")

sales_price = input("Geben Sie den eBay Verkaufspreis inkl. MwSt und Versand ein")
purchasing_price = input("Geben Sie Ihren Netteo-Einkaufspreis ein")

result = calculator(eBay_category, sales_price, purchasing_price)

print(f"Der Nettoverkaufspreis ist {result} €")
 
 
Hier der Fehler der genannt wird:

"raceback (most recent call last):
File "C:/Users/info/PycharmProjects/pythonProject1/main.py", line 36, in <module>
result = calculator(eBay_category, sales_price, purchasing_price)
File "C:/Users/info/PycharmProjects/pythonProject1/main.py", line 17, in calculator
ebay_provision = sales_price - (sales_price / 100 * ebay_fee) + 0.35
TypeError: unsupported operand type(s) for /: 'str' and 'int'!

Was übersehe ich hier?

ebay_provision = sales_price - (sales_price / 100 * ebay_fee) + 0.35
/ ist doch die Anweisung für eine Division und sales_price, 100 und andere variablen sind doch Integer oder Float Zahlen, da ist doch kein String.
Warum also: unsupported operand type(s) for /: 'str' and 'int'!
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Es ist absolut unüblich Variablen mit ihrem Typ zu initialisieren. Das ist unnötig, mach das nicht. Offensichtlich verwirt das nur.
Diese ganz ... = int() und ... float() können weg.
`x = float(5.2)` ist identisch zu `x = 5.2`. Da kann das float() also auch weg.

Und dann rätst du hier , dass das alles ints und floats sind. Geprüft hast du das nicht.
Und da input() eine Zeichenkette zurück gibt, bin ich mir ziemlich sicher, dass sales_price _kein_ int oder float ist.
Benutzeravatar
andie39
User
Beiträge: 152
Registriert: Dienstag 7. Dezember 2021, 16:32

sparrow hat geschrieben: Donnerstag 30. März 2023, 19:49 Es ist absolut unüblich Variablen mit ihrem Typ zu initialisieren. Das ist unnötig, mach das nicht. Offensichtlich verwirt das nur.
Diese ganz ... = int() und ... float() können weg.
`x = float(5.2)` ist identisch zu `x = 5.2`. Da kann das float() also auch weg.

Und dann rätst du hier , dass das alles ints und floats sind. Geprüft hast du das nicht.
Und da input() eine Zeichenkette zurück gibt, bin ich mir ziemlich sicher, dass sales_price _kein_ int oder float ist.
Ah. Hab nachgeschaut nach dem Hinweis:
input gibt Strings aus, hatte ich nicht mehr auf dem Schirm.

Dann komme ich weiter denke ich. Danke

Nachtrag: Hat geklappt:

sales_price = int(input("Geben Sie den eBay Verkaufspreis inkl. MwSt und Versand ein"))

Eine Kleinigkeit an der ich doch gestolpert bin.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Man definiert keine Variablen auf Vorrat. Das macht nur Probleme und führt zu schwer zu finde Fehlern. Ist eBay_category nicht 1 oder 2 oder ist sales_price = 200 dann sind ebay_fee und ebay_provision 0 und Du merkst es nichtmal, dass net_sales falsch berechnet werden.
Statt Bedingung und umgekehrte Bedingung explizit zu schreiben, benutzt man else, dann passieren auch so Fehler wie bei sales_price = 200 nicht.

Code: Alles auswählen

def calculator(ebay_category, sales_price, purchasing_price):
    shipping_costs = 5.00
    if ebay_category == 1:
        ebay_fee = 11 if sales_price <= 990.00 else 2
    elif ebay_category == 2:
        ebay_fee = 12 if sales_price <= 200.00 else 2
    else:
        raise ValueError("wrong ebay_category")

    ebay_provision = sales_price - (sales_price / 100 * ebay_fee) + 0.35
    net_sales = (sales_price / 1.19) - ebay_provision - shipping_costs
    return net_sales
geraldfo
User
Beiträge: 73
Registriert: Samstag 28. Januar 2023, 20:19
Wohnort: Nähe Wien
Kontaktdaten:

Für Geldbeträge sollte man den Typ Decimal verwenden.

LG Gerald
Benutzeravatar
andie39
User
Beiträge: 152
Registriert: Dienstag 7. Dezember 2021, 16:32

Die Fehlermeldung wäre auch noch gekommen. Wie gesagt ist noch nicht fertig ich hatte nur eine Zwischentest und hatte das genannte Problem.
Antworten