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
Prüfen ob eine Liste sortiert ist
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
Das Sortierkriterium muss als bekannt vorausgesetzt werden, sonst würde die ganze Aufgabe keinen Sinn machen.noisefloor hat geschrieben: ↑Sonntag 27. Mai 2018, 07:41 "kleiner" bezieht sich dabei natürlich auf dein Sortierkriterium (was wir ja nicht kennen).
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Schon klar. "iwir" bezieht sich auf die Hilfswilligen hier im Forum, nicht den TEMagBen hat geschrieben: ↑Sonntag 27. Mai 2018, 09:49Das Sortierkriterium muss als bekannt vorausgesetzt werden, sonst würde die ganze Aufgabe keinen Sinn machen.noisefloor hat geschrieben: ↑Sonntag 27. Mai 2018, 07:41 "kleiner" bezieht sich dabei natürlich auf dein Sortierkriterium (was wir ja nicht kennen).
Gruß, noisefloor
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")[/Python][/Python]
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]
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.
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:
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.
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
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.
ah super danke:) nächstes mal dann
Ah okay...naja. Die Methode hab ich nicht ausgesucht
Gibt es denn andere codes oder Funktionen?
Die gekürzte Variante sieht echt übersichtlicher aus
Gibt es denn andere codes oder Funktionen?
Die gekürzte Variante sieht echt übersichtlicher aus
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: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.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
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.
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!
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.
super formuliert !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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png