Listenfunktionen und Variablen

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
pyMarkus
User
Beiträge: 9
Registriert: Montag 20. April 2009, 19:05
Kontaktdaten:

Hallo Leute,
Bin grad dabei anzufangen ein Primzahlprogramm zu schreiben. Allerdings scheitert mein Vorhaben an einer ganz subtilen Frage. Erstmal der Code:

Code: Alles auswählen

for i in range(2, N):
   for k in range(2, N):
       produkt = i*k
       loesung.remove(produkt)
Der Code an sich spielt erstmal keine Rolle. Ist nur mit dabei um zu verstehen worum es geht. Aber es kommt jetzt die Fehlermeldung, dass das "produkt" nicht in der Liste ist. Wie löse ich das Problem?
Wenn wir schon beim Thema sind, gibt es eine Möglichkeit

Code: Alles auswählen

for i in range(2, N):
    loesung.append(i)
Auch so zu schreiben, dass die for Zeile in den Klammern des loesung.append() steht?

Grüße und Danke
Markus
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

ad 1: Du kannst nur etwas entfernen, was in der Liste ist.
Entweder löst du das über eine entsprechende exception oder prüfst vorher mit dem in-Operator, ob das, was du entfernen willst, auch drin ist.

ad 2: Was du suchst, nennt sich "list comprehension". Such mal danach.

ad 0: Ich hoffe mal, die geschachtelte Schleife steht in keinem Zusammenhang zu deinem Primzahlprogramm ... :wink:
pyMarkus
User
Beiträge: 9
Registriert: Montag 20. April 2009, 19:05
Kontaktdaten:

Wenn ich produkt die Zahl 3 zuweiße kommt immernoch die Fehlermeldung das "produkt" nicht in der Liste ist. Ich schätze meine Syntax hat hier einen Fehler.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

pyMarkus hat geschrieben:Wenn ich produkt die Zahl 3 zuweiße kommt immernoch die Fehlermeldung das "produkt" nicht in der Liste ist. Ich schätze meine Syntax hat hier einen Fehler.

Code: Alles auswählen

>>> zahlen = range(20)
>>> zahlen
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> zahlen.remove(3)
>>> zahlen
[0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> zahlen.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
pyMarkus
User
Beiträge: 9
Registriert: Montag 20. April 2009, 19:05
Kontaktdaten:

Das ist mir klar, aber wenn ich

Code: Alles auswählen

loesung.append(list(range(2, N)))
produkt = 3
loesung.remove(produkt)
verwende, funktioniert das nicht.
pcos
User
Beiträge: 16
Registriert: Dienstag 3. April 2007, 14:21

Hallo,

wie sieht Produkt aus, bevor die Schleife startet? Wahrscheinlich alle Zahlen von 2 bis N-1, s. Dein 2. Code-Fragment. In Deiner Schleife wird aber (wenn N>2) versucht, bestimmte Zahlen mehrfach (!) aus der Liste zu entfernen, z.B. ist 6==2*3 und 6==3*2. Das gibt dann beim 2. Versuch einen Fehler...
pcos
User
Beiträge: 16
Registriert: Dienstag 3. April 2007, 14:21

Hi,

meine letzte Antwort bezog sich hierauf:

Code: Alles auswählen

loesung.append(list(range(2, N)))
produkt = 3
loesung.remove(produkt)
Du hängst eine Liste an loesung an, also z.B.
vorher:

Code: Alles auswählen

loesung =[4,5,6]
nachher (für N=5):

Code: Alles auswählen

loesung =[4,5,6,[2,3,4]]
Also geht remove(3) nicht (falls 3 nicht vorher schon in loesung war)

Jetzt zu Deinem letzten Beitrag:

Wenn loesung = [2,3,4,5,6,7,8,9], dann funktioniert loesung.remove(3) natürlich. Aber nur ein einziges Mal, weil 3 genau ein Mal vorkommt. Siehe dazu meinen ersten Beitrag.


:?: EDIT: Ich stehe gerade auch auf dem Schlauch... Ich habe diesen Beitrag geschrieben, nachdem pyMarkus seinen Antwort von 17:18 geschrieben hat, die jetzt unter diesem Beitrag steht...
Zuletzt geändert von pcos am Freitag 15. Mai 2009, 17:26, insgesamt 2-mal geändert.
pyMarkus
User
Beiträge: 9
Registriert: Montag 20. April 2009, 19:05
Kontaktdaten:

loesung enthält 2,3,4,5,6,7,8,9
dann weiße ich produkt 3 zu
dann will ich "produkt" also 3 entfernen, geht aber nicht

Ich glaub ich steh grad aufm Schlauch

Edit: Habs jetzt glaub verstanden... Ich teste heute Abend mal noch und werde morgen mal mein Ergebnis zu diesem Thema präsentieren
Zuletzt geändert von pyMarkus am Freitag 15. Mai 2009, 17:33, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

pyMarkus hat geschrieben:loesung enthält 2,3,4,5,6,7,8,9
dann weiße ich produkt 3 zu
dann will ich "produkt" also 3 entfernen, geht aber nicht

Ich glaub ich steh grad aufm Schlauch
Mensch, nutz doch mal den interaktiven Modus von Python und sieh dir an, was du da hast/machst!

Code: Alles auswählen

>>> zahlen = range(10)
>>> zahlen.append(range(11,15))
>>> zahlen
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, [11, 12, 13, 14]]
Du solltest erstmal das Python-Tutorial durchgehen, bevor du dich an Primzahlen machst. Ein remove() im Primzahlprogramm ist ohnehin keine gute Idee.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

pyMarkus, lass dir doch einfach in jedem Schritt mal die Liste und das Produkt ausgeben, dann solltest du sehr schnell sehen, was da passiert.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten