Variable verloren oder Variable ignoriert?!

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.
BlackJack

@bluelagoon: Es nützt nicht viel Dir zu sagen wie es geht. Wenn Du *da* nicht selber drauf kommst, bist Du einfach nicht in der Lage zu programmieren.

Mach Dir doch mal Schritt für Schritt klar was da abläuft. Wann welcher Wert an den Namen `exclude` gebunden ist und wann Du welchen Wert der Liste hinzufügst. Das ist *so* offensichtlich. Das steht natürlich auch nirgends in Tutorials, weil das ganz gewöhnliches logisches Denken ist. Das Prinzip von Ursache und Wirkung. Wenn Du nur einmal etwas an eine Liste anhängst, dann ist da selbstverständlich auch nur ein Element drin. Wenn Du mehrere Elemente in der Liste haben willst, dann musst Du auch alle Elemente, die Du da drin haben willst, hinein tun.

Das ist sowohl in VB.net als auch in PHP genau so.

Edit: Nein es gibt keinen Befehl der ein Programm auf magische Weise das tun lässt, was Du haben möchtest. Du musst das Programm so schreiben, dass der Programmablauf in einer Weise stattfindet, dass das gewünschte Ergebnis heraus kommt. Du musst Dir überlegen wie das Ergebnis aussehen soll, und in welcher Reihenfolge man dafür dann welche Operationen ausführen muss, um zu diesem Ergebnis zu kommen. Diesen Vorgang nennt man auch allgemein Programmieren. Und der lässt sich nicht durch einen Befehl ersetzen.

Wenn Du meinst das wäre in VB.NET oder PHP besser/einfacher, dann schreib es doch mal in einer dieser beiden Sprachen.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

auf gut deutsch kann ich 100 mal kopieren und exclude umbenennen und dann mit append an die liste hängen oder wie soll ich das verstehen?
wenn ich excludes[1,2,3,4,5,] etc angeb bekomm ich ja auch n Fehler also hab ich mir überlegt die Daten in eine Zeile zu schreiben jedoch muss ich dann die Zeile 2 mal splitten. Oder hat jemand ne Idee ( nein ich will kein Code wissn der is mir scheiss egal) wie man sowas noch umsetzen kann?


mir bringts nix weil ich so viel in das Script zeit gesteckt hab DASS!!! ich nicht die Zeit vergeudet haben will.
ich hab excludes geändert alles gelöscht nur 2 Dateien angegeben ohne splitten ohne alles und was macht python?
gibt beide Dateien richtig aus aber ignoriert einfach das es nicht in die excludes darf! ich geb doch an nach dem splitt verwende Variable würd ichs in excel packen würd ich splitten nach " " Leerzeichen. aber hier müsste ich wenn dann exclude nochma nehmen nochma splitten is doch auch schwachsinnig ne Variable 2 mal hintereinander zu splitten
Zuletzt geändert von bluelagoon am Sonntag 24. Juli 2011, 08:20, insgesamt 1-mal geändert.
BlackJack

@bluelagoon: Du musst nicht Quelltext 100 mal kopieren, sondern den, welchen Du bereits hast, musst Du verstehen und entsprechend anpassen. Dazu musst Du den Ablauf von Code verstehen. Was in welcher Reihenfolge und unter welchen Bedingungen ausgeführt wird. Das sind Grundlagen, die in entsprechenden Grundlagentutorials erarbeitet werden können. Du musst in der Lage sein einfache Quelltextabschnitte zu sehen und ohne sie auf dem Rechner auszuführen, sagen können welche Werte zu jedem Zeitpunkt an welchen Namen gebunden sind. Du musst sagen können was hierbei heraus kommt und warum, also wie der Weg zu dem Ergebnis aussieht:

Code: Alles auswählen

for i in xrange(10):
    if i % 2 == 0:      # Test ob `i` gerade ist.
        n = i * i
squares = list()
squares.append(n)
print squares
Und Du musst das so Umschreiben können, das am Ende `squares` die Quadratzahlen aller geraden `i`\s enhtält. Und zwar nicht in dem Du irgendwelchen Code entsprechend oft kopierst! Solange Du das nicht hinbekommst, brauchst Du an Deinem Sicherungsskript nicht weiter machen. Das bringt nichts.

Wenn Du alle Pfade in eine Zeile in die Konfigurationsdatei schreibst, dann ist das Leerzeichen als Trenner ungeeignet, denn es gibt Pfade die Leerzeichen enthalten. ``Eigene Dateien\`` zum Beispiel.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja ich weis was der Code macht der Code springt immer runter bis er keine Zeile mehr mit excludes findet und splittet und nimmt dann die Datei. Naja stimmt an Eigene Dateien hab ich grade nicht gedacht aber an ,
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

@bluelagoon: um eine Verständnis für das zu bekommen was der Code macht solltest du hinter jede Zeile einen Kommentar schreiben was du erwartest was dort passiert.
Dann sollte dir selbst relativ schnell auffallen, dass da etwas nicht stimmt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sparrow hat geschrieben:@bluelagoon: um eine Verständnis für das zu bekommen was der Code macht solltest du hinter jede Zeile einen Kommentar schreiben was du erwartest was dort passiert.
Dann sollte dir selbst relativ schnell auffallen, dass da etwas nicht stimmt.
Hoffen wir es.

Ich habe es aufgegeben. Seit Anfang an ignoriert bluelagoon alle Hinweise und zeigt nicht das mindeste Verständnis für Algorithmen. Auch die Fähigkeit, selber Programmfragmente zu analysieren, sie mit simpelsten Debugausgaben (wie print type(exceptions)) anzureichern und diese auch noch zu verstehen, ist ihm nicht gegeben.

Es gibt Leute, denen liegt die Softwareentwicklung einfach nicht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich verstehe ja nicht, wieso sich der OP das Beispiel von BlackJack nicht anguckt? Das ist didaktisch optimal gestaltet, gerade weil es so simpel ist. Selbst wenn man es durch Hingucken nicht sofort sieht, so kann man diesen Schnipsel ja nehmen, durch "prints" auswerten und sich damit dann hoffentlich klar machen, was man ändern muss, damit die erwarteten Listeneinträge am Ende vorhanden sind.

Mit dieser Erkenntnis ist das Patchen am eigentlichen Problem dann trivial. :K

Besser kann man es in keinem Tutorial lernen ;-)

@bluelagoon: Kurze Nachfrage: Wieso verwendest Du nicht das ConfigParser-Modul?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Hyperion hat geschrieben:Ich verstehe ja nicht, wieso sich der OP das Beispiel von BlackJack nicht anguckt? Das ist didaktisch optimal gestaltet, gerade weil es so simpel ist. Selbst wenn man es durch Hingucken nicht sofort sieht, so kann man diesen Schnipsel ja nehmen, durch "prints" auswerten und sich damit dann hoffentlich klar machen, was man ändern muss, damit die erwarteten Listeneinträge am Ende vorhanden sind.

Mit dieser Erkenntnis ist das Patchen am eigentlichen Problem dann trivial. :K

Besser kann man es in keinem Tutorial lernen ;-)

@bluelagoon: Kurze Nachfrage: Wieso verwendest Du nicht das ConfigParser-Modul?

.... ich hab mir das schon angesehn.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Falls das mit dem `excludes` immer noch nicht klar geworden sein sollte: Ein Wert, der an einen Namen gebunden wurde, landet nicht plötzlich in einer Liste, sobald noch ein Wert an den selben Namen gebunden wird. Stattdessen wird der alte Wert des Namens durch den neuen Wert überschrieben, wodurch der alte Wert logischerweise nicht mehr über den Namen verfügbar ist. Das ist doch in Mathe oder selbst unter Windows nicht anders. Da wird auch eine vorhandene Datei bei Benutzung des gleichen Namens überschrieben. Niemand würde erwarten, dass der neue Datei-Inhalt einfach an den bereits vorhandenen Inhalt angehangen wird oder dass die beiden Datei-Inhalte automatisch in einem Zip-Archiv landen oder sowas. Wenn du jetzt also in irgendeiner Schleife immer wieder einen neuen Wert an `excludes` bindest, dann hält dieser Name am Ende natürlich nur den letzten Wert.

Die Lösung ist es also, etwas zu verwenden, das von vornherein dafür ausgelegt ist, als Container für mehrere Einträge zu dienen und sinnvollerweise mindestens die Möglichkeit zum Anhängen von Elementen bietet. Und *das* ist nun wirklich Grundlagenwissen, welches du in wirklich jedem Tutorial finden dürftest. Selbstverständlich muss das Anhängen dann in Bezug auf das Objekt und nicht in Bezug auf den Namen, an den das Objekt gebunden wurde, stattfinden. Folgendes wird also *nicht* zum von dir eventuell erwarteten Ergebnis führen:

Code: Alles auswählen

container = Container()
container = 'spam'
Dies würde einfach nur den Zugriff auf die `Container()`-Klasse über den Namen `container` zunichte machen, weil der Wert des Namens mit `'spam'` überschrieben wurde.

//edit: "Container()"-Exemplar natürlich.
Zuletzt geändert von snafu am Sonntag 24. Juli 2011, 10:42, insgesamt 1-mal geändert.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja danke.
wenigstens einer der mir das erklären kann. habs verstanden
BlackJack

@bluelagoon: Das hätte Dir jeder erklären können — inklusive *Du Dir selbst*. Was meinst Du wohl wozu mein vereinfachtes Quelltextbeispiel von dem Problem gut war!? Daran hättest Du Dir das Wissen selbst erarbeiten können. Und auch müssen. Denn nur so lernst Du das wirklich. Ich glaube nicht dass Du jetzt besser programmieren kannst als vor der Erklärung. Wie /me schon bemerkt hat, scheint Dir einfach die Fähigkeit oder der Willen zu fehlen Dich mit Problemen aktiv auseinander zu setzen und logisch und strukturiert an so etwas heran zu gehen.

Man kann ja gerne vermuten, dass ``a = 1; a = 2; a = 3; print a`` eine Liste ``[1, 2, 3]`` ausgibt. Aber diese Vermutung wird ja ganz offensichtlich von der Wirklichkeit widerlegt. Wobei ich die Vermutung an sich schon etwas eigenartig finde, bei jemandem der angeblich Tutorials durchgearbeitet hat, und sich nun schon etwas länger mit Python beschäftigt. Welches Tutorial und welche Stelle dort hat bei Dir denn diese Vermutung nahe gelegt?
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ich dachte es mir irgendwie schon weil die variable kein array is un erst dazu einer werden muss.
Antworten