Seite 1 von 2

Aufgaben in der Schule

Verfasst: Mittwoch 11. März 2009, 21:42
von baGX
Hallo, ich habe erst vor kurzen mit Python angefangen und wir haben in der Schule eine Aufgabe bekommen zu Python die wie folgt lautet.

Entwickle ein Python Programm, das aus einer vogegeben Liste, bestehend aus Integer-Werten, das größte und das kleinste Element ausgibt.

PS: Wir nehmen grad Listen in Python durch. Wäre echt net wenn ihr mir helfen könntet.

Edit (Leonidas): Verschoben. Ist schließlich keine "Idee".

Verfasst: Mittwoch 11. März 2009, 21:44
von INFACT

Code: Alles auswählen

>>> def minmax(list):
	print min(list)
	print max(list)
sollte doch funktionieren mit Integern...
oder habe ich das falsch verstanden?

INFACT

Verfasst: Mittwoch 11. März 2009, 21:47
von baGX
Hallo INFACT,
ja also aus integer Werten soll gemacht werden.

Verfasst: Mittwoch 11. März 2009, 21:59
von cofi
@INFACT Nur sollte man dabei keine built-ins überschreiben ;)

@baGX http://www.python-forum.de/topic-1689.html
Ansonsten kannst du dich auch vertrauensvoll an die offizielle Dokumentation wenden ( -> http://docs.python.org/)

Das ist zwar der eleganteste Weg die Aufgabe zu lösen, aber ich glaube aber ehrlich gesagt nicht, dass der Lehrer das im Sinn hatte.

Verfasst: Donnerstag 12. März 2009, 08:26
von ms4py
Ja ich denke auch, dass der einen Algorithmus sehen will :wink:

Code: Alles auswählen

min = list[0]
max = list[0]
for item in list:
  if item > max:
    max = item
  if item < min:
    min = item
Normal mach ich ja keine Hausaufgaben, aber mir war danach...

Verfasst: Donnerstag 12. März 2009, 11:20
von sea-live
ihr ünerschreibt alle build ins die beispile sind damit nicht gerade
hilfreich
wi wärs mit sinnvollen variablen namen auserhalb der buildins

z.b maximalwert
minimalwert

oder ähnliches

Verfasst: Donnerstag 12. März 2009, 16:01
von Blade Runner

Code: Alles auswählen

liste = sorted(liste)
print liste[0], liste[-1]
:wink:

Verfasst: Donnerstag 12. März 2009, 16:11
von HWK
Blade Runner hat geschrieben:

Code: Alles auswählen

liste = sorted(liste)
print liste[0], liste[-1]
Dazu braucht man sorted nicht, es reicht liste.sort().
MfG
HWK

Verfasst: Donnerstag 12. März 2009, 16:19
von 10111
Also ich kenne auch solche Hausaufgaben. Da geht's i.d.R. darum, alles "zu Fuß" zu machen. Das übt ungemein das grundsätzliche Verständnis, wie ein Algorithmus funktioniert. Da das Beispiel so einfach ist, beteilige ich mich auch mal.

Code: Alles auswählen

# Erst mal eine unsortierte Liste.
liste = [2, 8, 9, 3, 1, 10, 7, 6]
# Der minimale / maximale Wert wird auf das erste Element der Liste gesetzt.
minwert = maxwert = liste[0]
# Jetzt wird geschaut, ob die Listenelemente kleiner oder größer
# sind als die akt. Werte und entsprechend angepasst.
for wert in liste:
     if wert<minwert:
         minwert = wert
     if wert>maxwert:
         maxwert = wert
print minwert, maxwert
EDIT: Upps, hab eben erst gesehen, dass ice2k3 das schon so gelöst hat. Egal. Doppelt hält besser. :?

Verfasst: Donnerstag 12. März 2009, 16:26
von Blade Runner
HWK hat geschrieben:Dazu braucht man sorted nicht, es reicht liste.sort().
Das macht doch hier keinen Unterschied.

10111, das ist genau ice2k3s Lösung.

Verfasst: Donnerstag 12. März 2009, 16:33
von Hyperion
Die Frage ist, wieso mann das überhaupt hier fertig gelöst gepostet hat. So lernt der OP sicherlich nix!

Verfasst: Donnerstag 12. März 2009, 16:39
von Blade Runner
Naja, er kann sich einen Ansatz raussuchen und erweitern ... also "nichts lernen" kann man so nicht sagen.

Wobei sich das erweitern hier in Grenzen hält ... aber allgemein. :wink:

Verfasst: Donnerstag 12. März 2009, 17:21
von problembär
Hehe, min() und max() kannte ich noch nicht, der Lehrer aber offensichtlich auch nicht :lol:.

Verfasst: Donnerstag 12. März 2009, 17:26
von Leonidas
Wo wir schon dabei sind, offensichtlich unsinnigen Code zu posten:

Code: Alles auswählen

def recmax(iterable):
    if len(iterable) == 1:
        return iterable[0]
    else:
        tailmax = recmax(iterable[1:])
        if iterable[0] >= tailmax:
            return iterable[0]
        else:
            return tailmax

Verfasst: Donnerstag 12. März 2009, 20:18
von numerix
problembär hat geschrieben:Hehe, min() und max() kannte ich noch nicht, der Lehrer aber offensichtlich auch nicht :lol:.
Das muss nicht sein.
Es ist durchaus sinnvoll aus didaktischen Gründen, einen Algorithmus schreiben zu lassen, der das größte/kleinste Element liefert, ohne dafür eine builtin-function zu verwenden. Auch wenn den meisten hier die dahinter stehende Idee - über die Liste iterieren und immer mit dem bis dahin größten/kleinsten Element vergleichen - so trivial erscheint, dass es schmerzt: Für einen Schüler, der das algorithmische Denken noch lernen muss, kann das durchaus anspruchsvoll sein.

Die Tatsache, dass das "Problem" hier überhaupt auftaucht, bestätigt das.

Verfasst: Donnerstag 12. März 2009, 20:21
von BlackJack
@Leonidas: Der Name `iterable` ist unpassend. Wenn es wirklich für beliebige `iterable` funktionieren soll (ungetestet):

Code: Alles auswählen

def minmax(iterable):
    values = iter(iterable):
    try:
        min_value, max_value = values.next()
    except StopIteration:
        raise ValueError('empty iterable')
    for value in values:
        min_value = min(min_value, value)
        max_value = max(max_value, value)
    return (min_value, max_value)

Verfasst: Donnerstag 12. März 2009, 21:49
von HWK
Blade Runner hat geschrieben:
HWK hat geschrieben:Dazu braucht man sorted nicht, es reicht liste.sort().
Das macht doch hier keinen Unterschied.

10111, das ist genau ice2k3s Lösung.
Das macht schon einen Unterschied. Warum soll man unnötigerweise eine neue Liste erzeugen, wenn ich bereits eine Liste besitze, die ich an Ort und Stelle sortieren kann?
MfG
HWK

Verfasst: Donnerstag 12. März 2009, 22:03
von BlackJack
Zum Beispiel weil die Leute von einer Funktion die Minimum und Maximum einer Liste bestimmt, vielleicht erwarten, das diese Funktion die Liste nicht einfach so umsortiert!? `min()` und `max()` machen das ja auch nicht.

Verfasst: Donnerstag 12. März 2009, 22:30
von HWK
Aber das vorgeschlagene

Code: Alles auswählen

liste = sorted(liste)
macht ja genau das. Und da ist doch

Code: Alles auswählen

liste.sort()
, was zum selben Ergebnis führt, offensichtlich weniger aufwendig, da es keine neue Liste erzeugt.
MfG
HWK

Verfasst: Donnerstag 12. März 2009, 22:34
von Blade Runner
HWK hat geschrieben:Aber das vorgeschlagene

Code: Alles auswählen

liste = sorted(liste)
macht ja genau das.
Ich war zu faul

Code: Alles auswählen

kopie = sorted(liste)
zu schreiben. ;)