Seite 1 von 1

Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 00:40
von kimller
Hallo,

ich programmiere noch nicht sehr lange. Das mal vorneweg:)
Ich brauche zwei verschiedene Codes, mit welchen man kontrollieren kann, ob eine Liste sortiert ist oder nicht. Also wenn man eine Liste prüft soll nur ein bool rauskommen ob sie sortiert ist oder nicht. Ich habe danach gegoogelt aber nichts gefunden. Würde mich freuen falls jemand helfen kann.

KM

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 00:44
von __deets__
Und das hast du dir selbst ausgedacht, oder dein Lehrer?

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 07:41
von noisefloor
Hallo,

der simpelste und naheliegendste Ansatz wäre doch wohl, die Liste zu sortieren und dann das Ergebnis mit der Ausgangsliste zu vergleichen.

Alternativ kannst du auch aber über die Liste iterieren und schauen, ob das Element am Index x kleiner ist das am Index x+1. "kleiner" bezieht sich dabei natürlich auf dein Sortierkriterium (was wir ja nicht kennen).

Wieso brauchst du zwei Codes? Einer reicht doch dafür...

Gruß, noisefloor

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 09:49
von MagBen
noisefloor hat geschrieben: Sonntag 27. Mai 2018, 07:41 "kleiner" bezieht sich dabei natürlich auf dein Sortierkriterium (was wir ja nicht kennen).
Das Sortierkriterium muss als bekannt vorausgesetzt werden, sonst würde die ganze Aufgabe keinen Sinn machen.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 10:01
von noisefloor
MagBen hat geschrieben: Sonntag 27. Mai 2018, 09:49
noisefloor hat geschrieben: Sonntag 27. Mai 2018, 07:41 "kleiner" bezieht sich dabei natürlich auf dein Sortierkriterium (was wir ja nicht kennen).
Das Sortierkriterium muss als bekannt vorausgesetzt werden, sonst würde die ganze Aufgabe keinen Sinn machen.
Schon klar. "iwir" bezieht sich auf die Hilfswilligen hier im Forum, nicht den TE :-)

Gruß, noisefloor

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 12:02
von kimller
Hi,
danke erstmal für die ganzen Antworten :)
Also wir haben einen worst_code bekommen und sollen ihn "verbessern" und dann good_code nennen. Dieser worst_code kann dir später sagen, ob eine Liste sortiert ist oder nicht. Weil der Code nicht ganz so super ist ;) sollen wir zwei Alternativen im Internet finden, die dir auch sagen können ob eine Liste sortiert ist oder nicht.

Hier mal der worst_code (sorry, hab noch nicht rausgefunden wie ich das wie in einem Editor formatieren kann...):

# Beschreibung des Moduls `ListIsSorted`. Dieses
# Modul schaut, ob eine Liste absteigend
# sortiert angezeigt wird


def ListIsSorted(list: list) -> bool:
'''
This function looks if a list is sorted by going
through every item in the list given by any user
and then looks if at least the second item was
reached if the item before is a greater number than
the actual one.

list: Liste von Nummern
return: Rückgabewert
'''
if len(list) == 0 or len(list) == 1:
print("Keine Aussage möglich")

if len(list) == 0: # list has length 0!
# return simply the list
return list
elif len(list) == 1:
# TODO: maybe a good idea without elif?
a = []
for b in list:
b = int(b)
if isinstance(b, int):
print("is instance true" )
a.append(b)
else:
# do nothing
x = 0
return a
else:
sorted = True
while sorted:
y = -10e100000
for x in list:
if x > y:
sorted = True
y = x
continue
else:
sorted = False
y = x
break
break
return bool(sorted)
return sorted




def proof(cmpr):
resultingcmpr = "overwrite this"
for round in cmpr:
while round is not cmpr[-1]:
if round == cmpr[0]:
continue
else:
if round < cmpr[round - 1]:
resultingcmpr = True
return resultingcmpr


if __name__ == "worst_code":
print("ListIsSorted started")
elif __name__ == "__main__":
print("ListIsSorted imported")

Code: Alles auswählen

[Python][Python]
[/Python][/Python]

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 12:31
von kbr
Der Programmcode muß *zwischen* die Python-Tags, die ja schon gefunden hast. Die Bezeichnung worst_code ist sicherlich treffend. Das es aber die Aufgabe sein soll, im Internet zwei bessere Alternativen zu suchen, finde ich erstaunlich.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 12:50
von Sirius3
Was ist denn das für eine Methode zu lernen? Im Internet nach besserem Code suchen, zu einem Problem, das selten eine Lösung braucht.

Ich dachte, das „schlecht“ in ›worse_code‹ bezieht sich auf den Algorithmus und nicht auf den Code an sich. Die beiden Fälle "Länge der Liste ist 0 oder 1" liefern eine Liste zurück, statt eines Wahrheitswertes. Es wird ein beliebiger Wert in ein int umgewandelt, um dann zu prüfen, ob da wirklich auch ein int rauskommt? Also ist das nicht nur eine schlechter, sondern ein kaputter Code.

`-10e100000` ist normalerweise nicht mit Floats darstellbar, gibt also -inf, was man auch direkt angeben könnte. Eine while-Schleife, die nach dem ersten Durchlauf abbricht, ist auch quatsch.

Wenn man also allen unnützen Code und Fehler entfernt, bleibt das:

Code: Alles auswählen

def list_is_sorted(list):
    '''
    This function looks if a list is sorted by going
    through every item in the list given by any user
    and then looks if at least the second item was
    reached if the item before is a greater number than
    the actual one.

    list: Liste von Nummern
    return: True if list is sorted otherwise False
    '''
    y = -math.inf
    for x in list:
        if x <= y:
            return False
        y = x
    return True
Da sieht man auch wieder schön, dass Leute, die Typannotations benutzen, eine dynamische Programmiersprache nicht verstanden haben. Im ursprünglichen Code war der Rückgabewert falsch, und die Parameter zu eingeschränkt, da man auch jedes beliebige Iterierbare Objekt übergeben kann. Da sollte man seine Energie lieber in einen korrekten Doc-String stecken.

Was die Funktion `proof` machen sollt, wird mir aber nicht klar, außer, dass es eine Endlosschleife ist, die man auch einfacher machen könnte.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 12:53
von kimller
kbr hat geschrieben: Sonntag 27. Mai 2018, 12:31 Der Programmcode muß *zwischen* die Python-Tags, die ja schon gefunden hast. Die Bezeichnung worst_code ist sicherlich treffend. Das es aber die Aufgabe sein soll, im Internet zwei bessere Alternativen zu suchen, finde ich erstaunlich.
ah super danke:) nächstes mal dann

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 12:55
von kimller
Ah okay...naja. Die Methode hab ich nicht ausgesucht ;)
Gibt es denn andere codes oder Funktionen?

Die gekürzte Variante sieht echt übersichtlicher aus :lol:
Sirius3 hat geschrieben: Sonntag 27. Mai 2018, 12:50 Was ist denn das für eine Methode zu lernen? Im Internet nach besserem Code suchen, zu einem Problem, das selten eine Lösung braucht.

Ich dachte, das „schlecht“ in ›worse_code‹ bezieht sich auf den Algorithmus und nicht auf den Code an sich. Die beiden Fälle "Länge der Liste ist 0 oder 1" liefern eine Liste zurück, statt eines Wahrheitswertes. Es wird ein beliebiger Wert in ein int umgewandelt, um dann zu prüfen, ob da wirklich auch ein int rauskommt? Also ist das nicht nur eine schlechter, sondern ein kaputter Code.

`-10e100000` ist normalerweise nicht mit Floats darstellbar, gibt also -inf, was man auch direkt angeben könnte. Eine while-Schleife, die nach dem ersten Durchlauf abbricht, ist auch quatsch.

Wenn man also allen unnützen Code und Fehler entfernt, bleibt das:

Code: Alles auswählen

def list_is_sorted(list):
    '''
    This function looks if a list is sorted by going
    through every item in the list given by any user
    and then looks if at least the second item was
    reached if the item before is a greater number than
    the actual one.

    list: Liste von Nummern
    return: True if list is sorted otherwise False
    '''
    y = -math.inf
    for x in list:
        if x <= y:
            return False
        y = x
    return True
Da sieht man auch wieder schön, dass Leute, die Typannotations benutzen, eine dynamische Programmiersprache nicht verstanden haben. Im ursprünglichen Code war der Rückgabewert falsch, und die Parameter zu eingeschränkt, da man auch jedes beliebige Iterierbare Objekt übergeben kann. Da sollte man seine Energie lieber in einen korrekten Doc-String stecken.

Was die Funktion `proof` machen sollt, wird mir aber nicht klar, außer, dass es eine Endlosschleife ist, die man auch einfacher machen könnte.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 13:32
von kbr
@Sirius3: Ich gehe davon aus, dass es nicht wirklich Aufgabe war "Im Internet nach besserem Code suchen".

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 13:55
von kimller
kbr hat geschrieben: Sonntag 27. Mai 2018, 13:32 @Sirius3: Ich gehe davon aus, dass es nicht wirklich Aufgabe war "Im Internet nach besserem Code suchen".
Das ist die Aufgabenstellung...

5. (2 Punkte) Finden Sie zwei verschiedene Lösungen für dieses Problem im Internet. Sie müssen
den Code nicht unbedingt verstehen. Die Signaturen sollten Sie aber folgendermaßen anpassen:
"is_sorted_1(list array) -> bool" und "is_sorted_2(list array) -> bool". Die Lösungen sollen
für Python >= 3.5 funktionieren. Schreiben Sie diese Funktionen einfach noch in good_code.py
hinzu. Dokumentieren gehört natürlich dazu!

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 14:12
von kbr
@kimller: ok. Dann ergeben sich aber – zumindest für mich – Fragen nach der Didaktik und dem gewünschten Lernziel.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 14:17
von Sirius3
Ziel ist es, noch viel schlechteren Code im Internet zu finden, den man nicht einschätzen kann, ob er das macht, was er soll und dann merkt, dass weder das, was der Lehrer präsentiert noch das, was es im Internet gibt, ohne eigenes Verständnis sinnvoll nutzbar ist.

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 14:30
von kimller
Ich kann die Aufgbe leider nicht ändern :)
Aber vielen Dank für all eure Hilfe! Schönen Sonntag euch noch;)

Re: Prüfen ob eine Liste sortiert ist

Verfasst: Sonntag 27. Mai 2018, 18:11
von ThomasL
Sirius3 hat geschrieben: Sonntag 27. Mai 2018, 14:17 Ziel ist es, noch viel schlechteren Code im Internet zu finden, den man nicht einschätzen kann, ob er das macht, was er soll und dann merkt, dass weder das, was der Lehrer präsentiert noch das, was es im Internet gibt, ohne eigenes Verständnis sinnvoll nutzbar ist.
:lol: :lol: :lol: super formuliert !