Seite 1 von 1

Problem mit append

Verfasst: Montag 8. September 2008, 15:33
von Imperator
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?

Verfasst: Montag 8. September 2008, 15:37
von EyDu
Natürlich funktioniert das! Schreib ans Ende mal ein "print liste2".

Verfasst: Montag 8. September 2008, 15:41
von Hyperion
Das sollte eigentlich klappen! Außer "irgend eine Zahl" liegt außerhalb des Index - aber dann käme auch nen IndexError.

Verfasst: Montag 8. September 2008, 16:39
von Imperator
Funktionierte es würde ich ja wohl kaum hier nachfragen :roll:
wenn ich das printen lasse kriege ich []

Verfasst: Montag 8. September 2008, 16:41
von Trundle
Dann solltest du vielleicht den tatsächlich verwendeten Code posten.

Verfasst: Montag 8. September 2008, 17:30
von Imperator

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

Verfasst: Montag 8. September 2008, 18:04
von abgdf
Hallo,

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

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

Gruß

Verfasst: Montag 8. September 2008, 18:10
von Leonidas
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.

Verfasst: Montag 8. September 2008, 18:13
von numerix
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:

Verfasst: Montag 8. September 2008, 18:40
von Imperator
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.

Verfasst: Montag 8. September 2008, 18:52
von Leonidas
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

Verfasst: Montag 8. September 2008, 18:53
von cofi
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.

Verfasst: Montag 8. September 2008, 18:55
von Leonidas
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.

Verfasst: Montag 8. September 2008, 18:57
von Hyperion
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 ;-)

Verfasst: Montag 8. September 2008, 19:01
von 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

Verfasst: Montag 8. September 2008, 19:02
von Imperator
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
>>>

Verfasst: Montag 8. September 2008, 19:11
von Leonidas
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.

Verfasst: Montag 8. September 2008, 19:14
von Hyperion
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! :-(

Verfasst: Montag 8. September 2008, 19:57
von numerix
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.

Verfasst: Dienstag 9. September 2008, 12:36
von Imperator
@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).