Seite 2 von 2

Re: Einfache for-Schleife will nicht so ganz :(

Verfasst: Mittwoch 12. August 2020, 19:50
von Sirius3
Auch wenn es nicht benutzt wird, was ist der unterschied zwischen g_abf und g_abfall. Das eine scheint eine Abkürzung des anderen zu sein, aber wenn Du in Deinem Programm das eine oder andere benutzt, mußt Du immer wissen, was denn nun was bedeutet und darfst das auf keinen Fall verwechseln. Wenn Du die Variablen aber schon so benennst, dass sie nicht verwechselt werden können, existiert das Problem erst gar nicht.
Statt bei jeder Abfrage eingabe_As in eine Zahl umzuwandeln, mach das einmal beim Input.
Statt einer Liste z_sm, wo der erste Eintrag Arsen entspricht und der Zweite Quecksilber und der dritte irgend etwas anderes, benutzt man statt dessen ein Wörterbuch, wo der Schlüssel dem chemischen Element entspricht, was die Weiterverarbeitung viel einfacher macht.
Und es bleibt dabei, auch für dich ist zuordnung einfacher zu lesen als z und was g oder depv oder sonstwas heißt, macht es bei komplexeren Programmen auch nicht einfacher.

Re: Einfache for-Schleife will nicht so ganz :(

Verfasst: Donnerstag 13. August 2020, 05:31
von maowmaow
Sirius3 hat geschrieben: Mittwoch 12. August 2020, 19:50 Auch wenn es nicht benutzt wird, was ist der unterschied zwischen g_abf und g_abfall. Das eine scheint eine Abkürzung des anderen zu sein, aber wenn Du in Deinem Programm das eine oder andere benutzt, mußt Du immer wissen, was denn nun was bedeutet und darfst das auf keinen Fall verwechseln. Wenn Du die Variablen aber schon so benennst, dass sie nicht verwechselt werden können, existiert das Problem erst gar nicht.
Statt bei jeder Abfrage eingabe_As in eine Zahl umzuwandeln, mach das einmal beim Input.
Statt einer Liste z_sm, wo der erste Eintrag Arsen entspricht und der Zweite Quecksilber und der dritte irgend etwas anderes, benutzt man statt dessen ein Wörterbuch, wo der Schlüssel dem chemischen Element entspricht, was die Weiterverarbeitung viel einfacher macht.
Und es bleibt dabei, auch für dich ist zuordnung einfacher zu lesen als z und was g oder depv oder sonstwas heißt, macht es bei komplexeren Programmen auch nicht einfacher.
Huhu okay ich verstehe; würde dem auch zustimmen wenn ich so drüber nachdenke. Wenn ich mir nen Jahr später den Quellcode anschaue brauch ich umso länger um zu checken was das eine vielleicht macht. g_abfall sollte später nur der Abfrage dienen ob gefährlicher ABfall vorliegt. Das mit dem Wörterbuch ist also der Schlüssel zu "zugänglicherem code" ? Gemeint sind diese dictionaries oder? Hab nur mal gelesen das es sowas gibt, aber noch nicht ausprobiert. Ich schau mir das mal an danke.

Ich vermute auch mal das mein Code noch insgesamt zu lang ist und ich mir viele Sachen umständlicher mache als man das eigentlich tut. Beispielsweise verwende ich pro Element etwa 20 Zeilen Code, nur um die Zuordnungswerte zu überprüfen. Auch hier kann ich ja vermute ich mal verstärkt mit Listen arbeiten; also z.B. indem ich statt dem ich immer die Grenzwerte manuell in den Code implementiere sie mir z.B. aus einer Matrix o.a. abgreife oder? Wär dann vielleicht mal meine nächste AUfgabe mir das ganze zu verknappen :) Nuja danke euch soweit, ich hab erstmal viele Dinge die ich mir vielleicht anschauen sollte.

Eine Frage hätte ich noch: Gibt es eine Übersicht und Erklärung für so Noobs , wo es um die grundlegenden Funktionen bei python geht die man einfach drauf haben muss? Also z.B. . sort . append .count etc. ? Ich glaub wenn ich das schonmal kann, dann kommen noch viele weitere Ideen. Aktuell stell ich mir ein Problem und lös es vermutlich so trivial wie möglich ^^

Code: Alles auswählen

if not g_abfall:
    print("Es liegt kein gefährlicher Abfall vor")
elif len(g_abfall)>0 and len(g_abfall)<2:
    print("Für das folgende Kation wird der Grenzwert für gefährlichen Abfall überschritten:\n")
    for i in g_abfall:
        if "As" in i:
            g_abf.append("Arsen")
            gehalt_as=eingabe_As
            as_gw=round(((float(gehalt_as)/1500)-1)*100,2)
            print("Arsen"+" mit "+gehalt_as+" [mg/kg] ("+str(as_gw)+" % oberhalb des Grenzwertes von 1500 mg/kg)")

Re: Einfache for-Schleife will nicht so ganz :(

Verfasst: Donnerstag 13. August 2020, 06:09
von sparrow
Deshalb habe ich dir schon vor Tagen in deinem anderen Thread das Tutorial und die Dokumentation verlinkt.

Re: Einfache for-Schleife will nicht so ganz :(

Verfasst: Donnerstag 13. August 2020, 09:17
von Sirius3
So ganz verstehe ich den unterschied von g_abfall und g_abf noch nicht. Wie kommt man auf die Idee, einen chemisches Element `i` zu nennen? `in` ist wahrscheinlich der falsche Operator, weil Du ja nicht Wasserstoff in Helium finden willst, == ist korrekt.
Wenn man so viele Daten für ein Element sammeln muß, dann wäre eine Klassendefinition sinnvoll.

Noch etwas zum gleich Lernen: man rundet erst bei der Ausgabe und dafür benutzt man Stringformatierung:

Code: Alles auswählen

anteil = gehalt_as / 1500 - 1
print(f"Arsen mit {gehalt_as} [mg/kg] (f{anteil:.2%} oberhalb des Grenzwertes von 1500 mg/kg)")
Oder als nächster Schritt mit Wörterbüchern:

Code: Alles auswählen

GRENZWERTE = {
    "As": 1500,
}
[...]
for element in abfall_gefahrenstoffe:
    anteil = gehalt[element] / GRENZWERT[element] - 1
    print(f"{element} mit {gehalt[element]} [mg/kg] ({anteil:.2%} oberhalb des Grenzwertes von {GRENZWERT[element]} mg/kg)")