Python Anfänger - Schleife

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
Zasam
User
Beiträge: 1
Registriert: Donnerstag 8. Dezember 2016, 23:26

Hey Leute ich habe gerade begeonnen Pyhton zu lernen und habe noch nicht allzuviel Programmiererfahrungen aus anderen Sprachen. Bin gerade bei den Schleifen angekommen und verstehe nicht ganz wie ein Prinzip in dieser Schleife läuft:

Code: Alles auswählen

def measure_U(anyString):
    result = 0
    for e in anyString:
        if e[0] == 'U':
            result += 1
    return result
Der Code gibt am Ende aus wieviele Wörter mit "U" angefangen haben. Aber wieso gibt man in der Schleife einmal

Code: Alles auswählen

 if e[0]
an? Sollte er dann nicht eigentlich nur das erste Element zählen? Kenne es aus Java mit for Schleifen das eine Variable angegeben werden muss?
Sorry für die simple Frage, wusste aber auch nicht genau wonach ich bei google suchen sollte. Danke auf jeden Fall für eure Hilfe.
Mfg Zasam :)
Zuletzt geändert von Anonymous am Freitag 9. Dezember 2016, 01:52, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Zasam: Der Code macht so keinen Sinn. Entweder der Argumentname `anyString` stimmt, dann ist der Indexzugriff auf das erste Element von `e` unsinnig, denn dann ist das wieder `e` oder der Name `anyString` ist falsch und sollte eigentlich `strings` heissen, wo dann wie die Beschreibung in Deinem Beitrag nahelegt, alle Zeichenketten aus `strings` die mit 'U' anfangen, gezählt werden. Dann verstehe ich aber die Frage nicht, denn das unterscheidet sich eigentlich nicht wirklich von Java.

Wobei ich auch in dem Fall nicht per Index zugreifen würde sondern die `startswith()`-Methode auf Zeichenketten verwenden würde, denn sonst bekommt man ein Problem wenn `strings` auch leere Zeichenketten enthalten kann → `IndexError`.

Zudem ist das, egal in welchem Fall, etwas umständlich ausgedrückt. 'U's in einer Zeichenkette zählen: ``string.count('U')``. Und bei einem iterierbaren Objekt das Zeichenketten liefert, zählen wieviele davon mit 'U' anfangen: ``sum(s.startswith('U') for s in strings)``.

Edit: Also in Java ausgedrückt ist die Frage ob Du das hier meintest:

Code: Alles auswählen

    public static int measureU(String string) {
        int result = 0;
        for (char c : string.toCharArray()) {
            if (c == 'U') {
                result++;
            }
        }
        return result;
    }
Oder das hier:
[codebox=java5 file=Unbenannt.java] public static int measureU(Iterable<String> strings) {
int result = 0;
for (String string : strings) {
if (string.startsWith("U")) {
result++;
}
}
return result;
}[/code]
bzw.
[codebox=java5 file=Unbenannt.java] public static int measureU(Iterable<String> strings) {
return StreamSupport.stream(strings.spliterator(), false)
.mapToInt(s -> s.startsWith("U") ? 1 : 0)
.sum();
}[/code]
Antworten