while-Schleife oder Liste??

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
hm-94
User
Beiträge: 8
Registriert: Dienstag 27. Oktober 2015, 14:17

Hallo,
kann mir jemand einen tipp geben, wie diese Aufgabe funktioniert? Ich komme irgendwie nicht weiter :?:

Erzeugen Sie mit Hilfe einer while-Schleife eine Liste mit 10 Zahlen und geben Sie
nach jeder Eingabe die Liste aus. Brechen Sie die while-Schleife ab, wenn die Liste
vollständig ist.
a) Fügen Sie an erster Stelle der Liste den Wert 500 hinzu und geben Sie die Liste
aus.
b) Geben Sie die Länge der Liste, den Min. und den Max.wert aus.
c) Sortieren Sie die Listenelemente und geben Sie die Liste aus.

Muss ich das ganze als while-Schleife ausgeben oder einfach als Liste?

Das ganze in einer Liste abfragen finde ich nicht schwer, ich weiß aber nicht ob das hier gefragt ist.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Lass mich raten: Uni oder Informatik-Kurs in der Schule? Lehrer bzw Professoren haben anscheinend ein Händchen für mehrdeutige Aufgabenstellungen. Ich würde die Aufgabe so verstehen, dass der Benutzer in einer `while`-Schleife jedes Mal nach einer Eingabe gefragt wird. Diese Eingabe wird an eine Liste angehängt. Wenn in der Liste die zehnte Eingabe abgelegt wurde, dann soll die Schleife abgebrochen werden.

Ich würde das ja mit einer `for`-Schleife lösen, da dies hier passender ist, weil die Anzahl der Durchläufe bekannt ist. Aber gemäß Aufgabenstellung soll nun mal `while` benutzt werden.

EDIT: "Eingabe" kann aber auch ein merkwürdiges Wort für den Vorgang des Hinzufügen eines Elements sein. Dann wäre natürlich keine Benutzereingabe gemeint.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

While-Schleifen kann man nicht ausgeben, was soll dies überhaupt bedeuten? Außerdem beantwortet der Aufgabentext selbst deine Frage, indem er ganze 4mal explizit und unmissverständlich dazu auffordert die Liste auszugeben.

Zugegeben die Aufgabenstellung ist etwas komisch weil nicht definiert wird was mit Eingabe gemeint ist aber ich würde davon ausgehen dass du mit raw_input (Python 2) oder input (Python 3) in einer while-Schleife nach Zahlen fragen sollst um diese einer Liste hinzuzufügen bist du 10 Zahlen in der Liste hast. Danach machst du dann was auch immer für a), b) und c) notwendig ist.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine while-Schleife kann hier sogar ganz sinnvoll sein, wenn man nämlich Falscheingaben einfach nicht in die Liste mit aufnimmt. Dann können mehr als 10 Benutzereingaben erfolgen, aber nach der 10. gültigen wird die Schleife beendet.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dann auf jeden Fall, wenn die Benutzereingabe geprüft werden soll (was man in aller Regel ja auch tatsächlich tut). Ich hatte übersehen, dass es sich um Zahlen handeln soll.

Mich irritiert nur, dass auf die Art der Eingabe und auf mögliche Prüfungen nicht in der Aufgabenstellung eingegangen wird. Das sicherste ist wahrscheinlich, den Herausgeber der Aufgabe zu befragen, falls möglich. Sonst programmiert man etwas, das gar nicht gefordert war.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine Eingabevalidierung zu programmieren, auch wenn sie nicht explizit gefordert wird, ist auf jeden Fall nicht falsch. Es könnte nur sein, dass das den Tutor überfordert, weil der im Stoff nur 2 Wochen voraus ist :P . Ging mir jedenfalls mit meinem in "Systemnahe Programmierung" immer so.
hm-94
User
Beiträge: 8
Registriert: Dienstag 27. Oktober 2015, 14:17

habe es jetzt so gemacht:

Code: Alles auswählen

l=[]
counter = 1
while True:
    l.append(counter)
    print l
    counter = counter + 1
    if counter == 11:
        break
print " Aufgabe 8a"
l.insert(0,500)
print "neue liste:" , l , "\n"

print "Aufgabe 8b"

print "laenge der liste:" , len(l) , "\n" , "maximum:" , max(l) , "\n" , "minimum:" , min(l) , "\n"

print "aufgabe 8c"

l.sort()
print "sortierte liste:" , l
und es hat funktioniert! Vielen Dank für die Hilfe.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

den Counter brauchst du eigentlich nicht und die Formatierung der Ausgabe mittels der `format()` Methode von Strings ist auch etwas eleganter:

Code: Alles auswählen

my_list=[]
while len(my_list)<10:
    my_list.append(len(my_list)+1)
    print(my_list)

print("Aufgabe 8a")
my_list.insert(0,500)
print("neue liste: {}".format(my_list))
print("Aufgabe 8b")
print("Laenge der liste: {}, Maximum: {}, Minimum: {}".format(len(my_list), max(my_list), min(my_list)))
print("aufgabe 8c")
my_list.sort()
print("sortierte liste: {}".format(my_list))

Gruß, noisefloor
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@hm-94: Der Name einer Variable sagt viel darüber aus, für was sie gebraucht wird oder was der Inhalt ist. "l" ist aus dieser Perspektive besonders schlecht, Informationsgehalt 0 und dazu noch optisch schwer von I oder 1 zu unterscheiden. Auch ein Name wie "my_list" ist nicht viel besser, das Präfix "my" ist sinnfrei und der Datentyp im Namen hilft auch nicht gerade, zu erfahren, was denn in der Liste ist. Bei so generischen Aufgaben ist es natürlich besonders schwer, einen schönen Namen zu finden, daher habe ich mich mal für "numbers" entschieden. Die Bedingung der while-Schleife wäre am Anfang besser als am Ende. Ein Vergleich mit der Länge der Liste ist dann noch näher dran, was in der Aufgabe gefordert war. Zum Zählen hat Python itertools.count:

Code: Alles auswählen

from itertools import count
counter = count(1)
numbers = []
while len(numbers) < 10:
    numbers.append(next(counter))
    print numbers
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Hallo @Sirius3,

Du hat übersehen, dass an erster Stelle der Liste der Wert 500 hinzuzufügen ist.

Damit und unter Verwendung von Zufallswerten könnte der Code so aussehen:

Code: Alles auswählen

from random import randint
        
zahlen=[]
while len(zahlen) < 10:
    zahlen.append(randint(1,499))
    print(zahlen)

zahlen.insert(0,500)

print("\nAufgabe 8a")
print("neue liste: {}".format(zahlen))
        
print("\nAufgabe 8b")
print("Laenge der liste: {}, Minimum: {}, Maximum: {}".format(len(zahlen), min(zahlen), max(zahlen)))
        
print("\nAufgabe 8c")
zahlen.sort()
print("sortierte liste: {}".format(zahlen))
MfG, kodela
Antworten