Problem mit append

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
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Hallo,

mein Problem ist folgendes:

Ich habe 2 Listen. Aus der einen will ich mit append der anderen ein Element übergeben. Also so:

Code: Alles auswählen

liste1 = ['1', '2', '3', '4']
liste2 = []
liste2.append(liste1[irgendeine Zahl])
das funktioniert so aber nicht. Es kommt keine Fehlermeldung, aber zu liste2 wird nichts hinzugefügt. Woran liegt das?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Natürlich funktioniert das! Schreib ans Ende mal ein "print liste2".
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das sollte eigentlich klappen! Außer "irgend eine Zahl" liegt außerhalb des Index - aber dann käme auch nen IndexError.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Funktionierte es würde ich ja wohl kaum hier nachfragen :roll:
wenn ich das printen lasse kriege ich []
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Dann solltest du vielleicht den tatsächlich verwendeten Code posten.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Code: Alles auswählen

from string import ascii_uppercase #importiert eine Liste mit allen ascii-Großbuchstaben
from string import ascii_lowercase #importiert eine Liste mit allen ascii-Kleinbuchstaben
passwort = raw_input('Passwort eingeben: ') #verlangt nach dem Passwort
wie_oft = len(passwort)#uebergibt einer Variable die Anzahl der Passwortzeichen
element = 0 #uebergibt einer Variable den Wert 0
buchstaben = [] #erstellt eine leere Liste fuer die Buchstaben
zahlen = [] #erstellt eine leere liste fuer die Zahlen
for i in range(wie_oft): #erzeugt eine Schleife bis alle Element von Passwort eingeordnet wurden
        if passwort[element] == int: #prueft ob passwort[element] eine Ganzzahl ist
            zahl = passwort[element]
            zahlen.append(zahl) #fuegt passwort[element] der Liste "zahlen" hinzu
        elif passwort[element] == str:#prueft ob passwort[element] ein String ist
            buchstabe = passwort[element]
            buchstaben.append(buchstabe) #fuegt passwort[element] der Liste "buchstaben" hinzu
        element = element + 1 #erhoeht den Wert von "element" um 1
abgdf

Hallo,

der Code läuft bei mir, oder muß ich ein bestimmtes Passwort eingeben ?

Man kann es mit Kommentierungen ja auch übertreiben ... :)

Gruß
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schon mal bedacht, dass passwort[element] eine Instanz vom Typ String ist und nicht der Typ String selbst? Bei dir ist nie eine der Bedingungen wahr und vor allem auch der int-Teil wird auch wenn du den Typentest berichtigst nie wahr sein weil ``passwort[element]`` immer vom Typen ``str`` sein.

Was soll eigentlich der Code machen? Das sieht in etwa so aus als hättest du keine Ahnung von Python und versuchst C zu programmieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

abgdf hat geschrieben:der Code läuft bei mir
Eigenartige Definition von "läuft".

Sicher macht das Programm nicht das, was es soll.

Ein Beispiel:

Code: Alles auswählen

>>> if "3" == int:
...     print "3 ist eine Zahl"
... else:
...     print "3 ist keine Zahl"
...
3 ist keine Zahl
Und dass das nicht funktioniert, liegt nicht daran, dass "3" hier eine Zeichenkette ist (wie das im Beispielcode der Fall ist) ... mit 3 geht es natürlich auch nicht :wink:
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

abgdf hat geschrieben:Hallo,

der Code läuft bei mir, oder muß ich ein bestimmtes Passwort eingeben ?

Man kann es mit Kommentierungen ja auch übertreiben ... :)

Gruß
schaden kanns auch nicht :wink:
@Leonidas: Ein raw_input verhält sich genauso wie eine Liste. habe ich heute auch erst gelernt. Aber es ändert eh nichts, da ich es vorher in eine Liste umgewandelt habe, und da hat es auch nicht funktioniert.

@Numerix: Ist schon klar, aber fürs erste wäre es schonmal schön, wenn diese "pseudo zahlen" dann halt auch zu buchstaben hinzugefügt würden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Imperator hat geschrieben:@Leonidas: Ein raw_input verhält sich genauso wie eine Liste. habe ich heute auch erst gelernt. Aber es ändert eh nichts, da ich es vorher in eine Liste umgewandelt habe, und da hat es auch nicht funktioniert.
Quatsch. Ein ``raw_input`` verhält sich nicht wie eine Liste sondern wie eine Funktion. Und diese kann man Aufrufen und gibt einen String zurück. Dieser ist Iterable, wie eine Liste.

*sigh* Gehe ich recht in der Annahme, dass du sowas haben willst?

Code: Alles auswählen

buchstaben, zahlen = list(), list()
password = raw_input('Passwort eingeben: ')
for character in password:
    try:
        zahlen.append(int(character))
    except ValueError:
       buchstaben.append(character)
print buchstaben, zahlen
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Imperator hat geschrieben: schaden kanns auch nicht :wink:
Natürlich können zu viele Komemntare schaden. Zum Ainen müssen die Kommentare aktuell gehalten werden - nichts ist schlimmer als wenn sich Code und Comment widersprechen - und zum Anderen ist diese Masse an Kommentaren ungalublich ablenkend.

Schreibe lieber selbstdokumentierenden Code und Kommentare dann wenns nötig ist bzw wenns empfohlen wird, z.B. Docstring usw.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi hat geschrieben:
Imperator hat geschrieben: schaden kanns auch nicht :wink:
Natürlich können zu viele Komemntare schaden.
Vor allem auch diese hässlichen Inline-Kommentare, die eine Zeile mit Leichtigkeit über 80 Zeichen Länge hinausbefördern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Imperator hat geschrieben: @Leonidas: Ein raw_input verhält sich genauso wie eine Liste. habe ich heute auch erst gelernt. Aber es ändert eh nichts, da ich es vorher in eine Liste umgewandelt habe, und da hat es auch nicht funktioniert.
Was hat das mit Listen zu tun? So wie Du das machst, prüfst Du einfach nicht auf den Typen String ;-)
BlackJack

Oder ohne Ausnahmebehandlung:

Code: Alles auswählen

def main():
    characters = list()
    digits = list()
    password = raw_input('Please enter password: ')
    for character in password:
        (digits if character.isdigit() else characters).append(character)
    print characters, digits
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Leonidas hat geschrieben:
Imperator hat geschrieben:@Leonidas: Ein raw_input verhält sich genauso wie eine Liste. habe ich heute auch erst gelernt. Aber es ändert eh nichts, da ich es vorher in eine Liste umgewandelt habe, und da hat es auch nicht funktioniert.
Quatsch. Ein ``raw_input`` verhält sich nicht wie eine Liste sondern wie eine Funktion. Und diese kann man Aufrufen und gibt einen String zurück. Dieser ist Iterable, wie eine Liste.
probier mal folgendes in der shell aus:
>>> eingabe = raw_input(' ')
sdhshfo
>>> print eingabe[0]
s
>>>
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Imperator hat geschrieben:probier mal folgendes in der shell aus:
>>> eingabe = raw_input(' ')
sdhshfo
>>> print eingabe[0]
s
>>>
Echt, das habe ich ja noch gar nicht gewusst! :twisted:

Nein, im Ernst, hast du überhaupt meine Aussage durchgelesen? Das Strings iterable sind und Indexzugriff erlauben, ist ja jedem nach dem Python-Tutorial bekannt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ja und? raw_input() ist aber nun einmal eine Funktion ;-)

Was Du meinst ist, dass sich ein String wie eine Liste verhält - wobei man eher sagen sollte, dass beide sich wie eine Sequenz verhalten.

Edit: Schon wieder zu spät! :-(
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Imperator hat geschrieben:@Numerix: Ist schon klar, aber fürs erste wäre es schonmal schön, wenn diese "pseudo zahlen" dann halt auch zu buchstaben hinzugefügt würden.
Das verstehe ich jetzt so, dass du Code schreibst, von dem dir "klar ist", dass und warum er nicht funktioniert, dir das aber egal ist, weil es dir nur darum geht, dass ein Teil des Codes funktioniert. Entweder ist das ein neuer pädagogischer Ansatz für ein Selbstlernprogramm oder dir ist eben nicht klar, was hier warum nicht funktioniert.

Nachdem, was du sonst so in diesem Thread zum Besten gegeben hast, könnte es durchaus nicht schaden, wenn du dir mal ein paar Tage Zeit nimmst, das Python-Tutorial durchzuarbeiten. Danach dürfte dein Code um einiges besser aussehen.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

@Leonidas: Dein Code funktioniert, danke.
@Numerix: Es ist mir später aufgefallen, aber da das ganze nicht funktionierte, habe ich es erst mal nicht ausgebessert. Hätte ja gut sein können, dass ich den Code komplett löschen muss (was ja auch so war).
Antworten