TypeError: unsupported operand type(s)
- DeaD_EyE
- User
- Beiträge: 1222
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Wie viele Tage hat ein Monat? Wie viele Tage hat ein Jahr? Wie viele Tage hat ein Schaltjahr? Kann ich eine Zeitspanne in Monaten korrekt angeben, dass jeder sagen kann, dass es exakt x Sekunden sind? Wenn ich eine Zeitspanne in Monaten angebe, aber der Startzeitpunkt unbekannt ist, woher weiß ich dann, wie viele Tage das sind?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
- User
- Beiträge: 40
- Registriert: Freitag 2. Februar 2024, 18:25
@narpfel Ja mit Namensgebungen habe ich es nicht so. Heißt jetzt "berechnung = berechnung"Warum hast du in der Klasse `berechne = berechnung` geschrieben?
Ja kommt mir auch so vor. Gerade auch weil diese beiden Module im gleichen Package liegen. Aber einfach "import berechnung" geht nicht`berechnungen.berechnung` ist immer noch eine Verschachtelung zu viel.
Dann kommt:
Code: Alles auswählen
Traceback (most recent call last):
File "/home/masterblack/PycharmProjects/Verbrauchsrechner/verbrauchsrechner.py", line 5, in <module>
from berechnungen.abrechnung import Abrechnung
File "/home/masterblack/PycharmProjects/Verbrauchsrechner/berechnungen/abrechnung.py", line 8, in <module>
import berechnung
ModuleNotFoundError: No module named 'berechnung'
Ja ich weiß, aber ich habe in Bezug auf clean code gelesen, dass ein return(glaube hies) keine Operation sondern immer eine einzige Variable zurückgeben sollte.Man muss nicht jedes Zwischenergebnis an einen Namen binden.
Bin ich dabei muss ich noch durchsehen.Und bitte unbedingt `--strict` für mypy benutzen, deine Typannotationen sind immer noch kaputt.
@DeaD_EyE Ich weiß was gemeint ist aber so genau brauche ich es hier jetzt nicht.Wie viele Tage hat ein Monat? Wie viele Tage hat ein Jahr?
Hallo,
es ist egal ob du schreibst:
oder
Return gibt jeweils das Ergebnis der Rechnung zurück und nichts anderes. Bei deinem Code wird das Ergebnis an einen Namen gebunden und im zweiten wird dieser Schritt übersprungen und das Ergebnis gleich zurück gegeben. Also es wird in diesem Beispiel immer nur *ein Wert* zurück gegeben und nie eine Operation.
Ich weis nicht in welchen Worten "clean code" genau definiert ist. Aber ich könnte mir vorstellen, das "unnötige" Namen nicht dazu gehören.
Grüße
Dennis
es ist egal ob du schreibst:
Code: Alles auswählen
@property
def gesamtbetrag_netto(self) -> float:
betrag = self.arbeitspreis_netto + self.grundpreis_tagesgenau_netto
return betrag
Code: Alles auswählen
@property
def gesamtbetrag_netto(self) -> float:
return self.arbeitspreis_netto + self.grundpreis_tagesgenau_netto
Ich weis nicht in welchen Worten "clean code" genau definiert ist. Aber ich könnte mir vorstellen, das "unnötige" Namen nicht dazu gehören.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
- __blackjack__
- User
- Beiträge: 14000
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Alles aus den beiden Code-Blöcken lässt sich auf drei Funktionen vereinfachen:
Mehr macht der gezeigte Code letztlich nicht. Und das waren mal zwei Klassen in zwei Modulen die jeweils auch noch in einem Package stecken. 
Code: Alles auswählen
from datetime import datetime
def vergangene_tage_ermitteln(anfangsdatum, enddatum=None):
return (enddatum - anfangsdatum).total_seconds() / (60 * 60 * 24)
def gesamtbetrag_brutto(tarif):
gesamtbetrag_netto = tarif.arbeitspreis_netto + round(
(tarif.arbeitspreis_netto * 12 / 365)
* vergangene_tage_ermitteln(datetime(2024, 6, 13)),
3,
)
return (
gesamtbetrag_netto
+ gesamtbetrag_netto * tarif.mehrwertsteuersatz / 100
)
def bisheriger_gezahlter_abschlag(tarif):
return (
vergangene_tage_ermitteln(datetime(2024, 6, 1))
// 28
* tarif.monatlicher_abschlag
)
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
-
- User
- Beiträge: 40
- Registriert: Freitag 2. Februar 2024, 18:25
@__blackjack__ also ich muss ehrlich sagen, dies hier verstehe ich nicht so ganz
. Aber ich werde es mir mal merken. Ansonsten lasse ich es jetzt mal so wie ich es habe. Bis ich etwas mehr verstehe.
Danke an @all.
Tschü Shredder

Danke an @all.
Tschü Shredder
- __blackjack__
- User
- Beiträge: 14000
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Master_Shredder: Na ich habe den Code genommen aus den beiden Modulen und habe statt Aufrufe/Property-Zugriffe in den einzelnen Funktionen/Methoden zu machen, einfach alles was nur *einmal* irgendwo anders verwendet wurde, direkt reingeschrieben. Eine Funktion ist zum Property `Tarif.arbeitspreis_netto` geworden, weil die nur mit Attributen von `Tarif` gearbeitet hat. Und aus der Zeitspannenfunktion habe ich das unschöne "Tage"/"Monate"-Argument rausgenommen, was a) die Funktion vereinfacht, und b) sieht man jetzt deutlich dass ein Monat in der Rechnung 28 Tage hat, weil an der entsprechenden Stelle die Tage durch 28 geteilt werden. An 2419200 sieht man das ja nicht so wirklich direkt, dass das 28 Tage sind. 
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
- DeaD_EyE
- User
- Beiträge: 1222
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Ich nutze die TypenAnnotationen exzessiv, da mir die IDE dann die richtigen Vorschläge macht.Sirius3 hat geschrieben: Samstag 19. Oktober 2024, 16:14 @narpfel: bei Sprachen, die Ducktyping unterstützen sind Typannotation per Definition kaputt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server