Seite 1 von 1

For-Schleife Indexwerte Frage

Verfasst: Mittwoch 26. Mai 2021, 14:30
von meert62
Hallo,

ich bin neu hier in diesem Forum und hoffe ich formuliere diese Frage gut und verständlich.
Ich bin gerade dabei ein Programm zu erstellen, welches zahlen einliest und danach diese zahlen nach der Größe sortiert. Nun bin ich an einem Punkt an dem ich mir den Index-Wert ausgeben lassen will um diesen danach weiter zu verwenden, doch irgendwie funktioniert das nicht es kommt kein Error usw aber eine Ausgabe bekomme ich leider auch nicht. Kann mir jemand hier bitte weiterhelfen? Wo sich das genaue Problem befindet, habe ich Fett formatiert.

Ich freue mich über Rückmeldung

array = []
for zahl in range(1,11):
array.append(zahl)
#Array deklariert und initialisiert

pmin = array[0]

for i in range(len(array)):
if pmin > array:
pmin = array
for counter in range(len(array)):
if array[counter] == pmin:
print(counter)

merke = array[0]
array[0] = pmin

Re: For-Schleife Indexwerte Frage

Verfasst: Mittwoch 26. Mai 2021, 21:18
von darktrym
Wenn pmin eine Zahl ist und array eine Liste was soll ein Größer-Vergleich bringen?

Re: For-Schleife Indexwerte Frage

Verfasst: Mittwoch 26. Mai 2021, 21:40
von Sirius3
@darktrym: das ist ein Darstellungsproblem, weil [ i ] als italic vom Forum interpretiert wird.

@meert62: Ein `array` ist in Python etwas anderes, Du hast hier Listen. In Python werden keine Variablen deklariert, man benutzt sie einfach. Die erste for-Schleife läßt sich durch einen `list`-Aufruf vereinfachen.

Da Du schon eine Liste mit aufsteigenden Zahlen hast, ist pmin, die erste Zahl, auch die kleinste, pmin > array[ i ] also nie erfüllt.

Re: For-Schleife Indexwerte Frage

Verfasst: Donnerstag 27. Mai 2021, 00:39
von __blackjack__
@meert62: `merke` wird nirgends verwendet.

`i` wird nur für den Indexzugriff verwendet. Das ist aber unnötig indirekt, weil man in Python *direkt* über die Elemente von Listen itererieren kann.

Wenn man eine laufende Zahl *zusätzlich* zu jedem Element braucht, gibt es `enumerate()`.

Was soll der Name `pmin` denn eigentlich bedeuten? Wofür steht das `p` und warum muss man das als Leser raten?

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    numbers = list(range(1, 11))
    
    pmin = numbers[0]
    for number in numbers:
        if pmin > number:
            pmin = number
            for index, number in enumerate(numbers):
                if number == pmin:
                    print(index)

    numbers[0] = pmin


if __name__ == "__main__":
    main()
Wobei das wiederverwenden von `number` in der inneren Schleife nicht schön ist. Die würde ich wohl in eine Funktion auslagern.

Ansonsten sieht das so ein bisschen so aus als würde der Code effektiv einfach nur das hier machen:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    numbers = list(range(1, 11))
    numbers[0] = min(numbers)
    


if __name__ == "__main__":
    main()
Was sich, falls `numbers` tatsächliche immer *so* aussieht ganz einfach auf das hier reduzieren lässt:

Code: Alles auswählen

#!/usr/bin/env python3


def main():
    numbers = list(range(1, 11))
    

if __name__ == "__main__":
    main()
Natürlich unter der Vorussetzung das mit `numbers` danach noch irgend etwas gemacht wird, denn ansonsten kann man sich das Programm auch komplett sparen. 🙂