For Schleife -> If zählen

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
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Hallo zusammen, google hilft mir leider nicht weiter deshalb dachte ich mir ich versuche es hier, vielleicht weis jemand die Lösung.

Ich habe folgende Schleif

For var1 in Ausgabe_Text:
If Bedingung 1 == True:
.....
If Bedingung 2 == True:
.....
else:

Ich möchte am Ende ein "Gesamtergebnis" je If-Bedingung ausgeben. Also wie oft war Bedingung 1 in der Liste, wie oft die 2 usw.

Wie stelle ich das an?
Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Namlus: Variable mit 0 initialisieren: ``some_name = 0``. Den Wert um 1 erhöhen: ``some_name += 1``.

Das ist zwar nur Pseudo-Code, aber trotzdem die beiden Hinweise:

1. Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassennamen (PascalCase).
2. Man vergleicht nicht mit literalen Wahrheitswerten. Da kommt ja entweder das Ergebnis der Bedingung heraus wenn die Wahr ist oder False wenn die Bedingung unwahr ist, also ist der Vergleich überflüssig. Sollte man mal das Gegenteil von einem Wahrheitswert brauchen, dann gibt es dafür ``not``.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Hallo,

vielen Dank für die Antwort. Ja ich habe letzte Woche mit Python begonnen (und das bis gestern noch falsch geschrieben Phyton....) und murksle mich damit durch.

Kleinschreiben.... ja ich weis, daran muss ich mich noch gewöhnen... :-)

Ja das verstehe ich so weit. Nur wie bekomme ich die Variable aus der For Schleife wieder raus:

some_name = 0
For var1 in Ausgabe_Text:
-> If Bedingung 1 == True:
-> .....
-> some_name += 1
-> If Bedingung 2 == True:
-> .....
-> else:

print(str(some_name))


das habe ich so schon versucht, das funktioniert aber nicht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Doch, tut es.

Code: Alles auswählen

some_name = 0
for i in range(10):
     if i %2:
         some_name += 1
print(some_name)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@Namlus: bitte zeige Deinen richtigen Code mit der dazugehörigen Fehlermeldung. Aus Deinen Code-Fragmenten kann man nicht rauslesen, was Du denn falsch machst.
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Vielen Dank.

Stimmt..... tut es (plötzlich)!!!!

Was mich zur frage bringt: Warum tat es das zuvor nicht.....?
Aber diese Frage werden wir hier wohl niemals klären können *lach*
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Jetzt weis ich warum

"some_name += 1" ist der Zaubercode

ich hatte
"some_name + 1" das hat nicht funktioniert.....
Benutzeravatar
Kebap
User
Beiträge: 776
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Der Zaubercode "some_name += 1" ist auch nur eine Abkürzung für "some_name = some_name + 1" also insofern warst du schon halb richtig.. :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

In einer Funktion funktioniert das prinzip aber nicht oder?


some_name = 0
def funktion():
....führe etwas aus
if ausführung == "Fehler"
some_name += 1
return
funktion

print(some_name)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Funktionen muß man auch aufrufen. Und alles was sie brauchen, bekommen sie über ihre Argumente, das Ergebnis ist der Rückgabewert:

Code: Alles auswählen

def funktion(ausfuehrung):
    ergebnis = 0 
    if ausfuehrung == "Fehler":
        ergebnis += 1
    ...
    return ergebnis

some_name = funktion("Fehler")
print(some_name)
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@Namlus: Bitte poste Code in Code-Tags. Code-Tags werden eingefügt, indem man den </>-Button im "vollständigen Editor" drückt. Zwischen die Tags gehört dein Code.
Es ist dir sicher schon aufgefallen, dass sonst die Einrückungen verloren gehen und dass der Code bei anderen, die hier posten, anders aussieht?

Du solltest ein Python-Tutorial durcharbeiten.
Ich weiß, dass du dich in dem anderen Thread dafür ausgesprochen hast, dass du "quick&dirty"-Lösungen willst, aber das wird nicht funktionieren.
In einem Tutorial wirst du grundlegende Dinge lernen. Etwa wie Funktionen funktionieren und was es für Datenstrukturen gibt und wie man mit ihnen arbeitet.

Und du wirst etwas über die Sichtbarkeit von Variablen lernen. Denn das, was du machen willst funktioniert durchaus. Aber jed Funktion hat einen eigenen Namensraum.
Für Funktionen gilt: Alles was eine Funktion braucht, bekommt sie als Parameter übergeben. Ihr ergebnis gibt sie mit return zurück.

Weiter gilt: Auf Modulebene (also ohne Einrückung) stehen ausschließlich die Importe, die Definition von Konstanten (die heißen so, weil sie sich _nie_ ändern, die Definition von Klassen und Funktionen und die berühmt Weiche um eine Funktion namens "main" aufzurufen. In "main" beginnt dein Programm:

Code: Alles auswählen

def main():
    # das Programm beginnt hier

if __name__ == "__main__":
    main()
Dann kommst du erst gar nicht auf die Idee, globale Variablen zu verwenden.
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

sparrow hat geschrieben: Samstag 7. Januar 2023, 21:17 @Namlus: Bitte poste Code in Code-Tags. Code-Tags werden eingefügt, indem man den </>-Button im "vollständigen Editor" drückt. Zwischen die Tags gehört dein Code.
Es ist dir sicher schon aufgefallen, dass sonst die Einrückungen verloren gehen und dass der Code bei anderen, die hier posten, anders aussieht?

Du solltest ein Python-Tutorial durcharbeiten.
Ich weiß, dass du dich in dem anderen Thread dafür ausgesprochen hast, dass du "quick&dirty"-Lösungen willst, aber das wird nicht funktionieren.
In einem Tutorial wirst du grundlegende Dinge lernen. Etwa wie Funktionen funktionieren und was es für Datenstrukturen gibt und wie man mit ihnen arbeitet.

Und du wirst etwas über die Sichtbarkeit von Variablen lernen. Denn das, was du machen willst funktioniert durchaus. Aber jed Funktion hat einen eigenen Namensraum.
Für Funktionen gilt: Alles was eine Funktion braucht, bekommt sie als Parameter übergeben. Ihr ergebnis gibt sie mit return zurück.

Weiter gilt: Auf Modulebene (also ohne Einrückung) stehen ausschließlich die Importe, die Definition von Konstanten (die heißen so, weil sie sich _nie_ ändern, die Definition von Klassen und Funktionen und die berühmt Weiche um eine Funktion namens "main" aufzurufen. In "main" beginnt dein Programm:

Code: Alles auswählen

def main():
    # das Programm beginnt hier

if __name__ == "__main__":
    main()
Dann kommst du erst gar nicht auf die Idee, globale Variablen zu verwenden.
Vielen Dank.
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Habe es gerade ausprobiert und es funktioniert einwandfrei. Aber wieso versehe ich gerade nicht......

Also wenn "ausführung" den Wert "Fehler" enthält, dann wird "ergebnis + 1 gerechnet". Im return gebe ich "ergebnis" an. Mit Print lese ich aber "some_name = funktion("Fehler") aus. Warum kommt da dann die 1? Wie kommt die 1 dahin, die sollte doch in der variable "ergebnis" liegen oder?

Code: Alles auswählen

some_name = ergebnis
liefert keinen Wert. Die Logik bzw. das System dahinter will sich mir gerade nicht offenbaren....

Das heisst ja ich muss die Funktion 2x ausführen. 1x mit der Berechnung und 1x nur um auszugeben ob es bei der Berechnung einen Fehler gab, oder verstehe ich das komplett falsch?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann wiederhole ich sparrows Worte mal: Du solltest ein Python-Tutorial durcharbeiten.
Dir fehlen noch so viele Grundlagen, die wir hier im Forum nicht vermitteln können.
Namlus
User
Beiträge: 70
Registriert: Donnerstag 5. Januar 2023, 15:10

Sirius3 hat geschrieben: Sonntag 8. Januar 2023, 10:36 Dann wiederhole ich sparrows Worte mal: Du solltest ein Python-Tutorial durcharbeiten.
Dir fehlen noch so viele Grundlagen, die wir hier im Forum nicht vermitteln können.
Dankeschön.
Antworten