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

Problem mit append

Beitragvon Imperator » Montag 8. September 2008, 15:33

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: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Montag 8. September 2008, 15:37

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

Beitragvon Hyperion » Montag 8. September 2008, 15:41

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:

Beitragvon Imperator » Montag 8. September 2008, 16:39

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

Beitragvon Trundle » Montag 8. September 2008, 16:41

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:

Beitragvon Imperator » Montag 8. September 2008, 17:30

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

Beitragvon abgdf » Montag 8. September 2008, 18:04

Hallo,

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

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

Gruß
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 8. September 2008, 18:10

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 Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Montag 8. September 2008, 18:13

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:

Beitragvon Imperator » Montag 8. September 2008, 18:40

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 8. September 2008, 18:52

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 Modvoice
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Montag 8. September 2008, 18:53

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 8. September 2008, 18:55

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 Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Montag 8. September 2008, 18:57

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

Beitragvon BlackJack » Montag 8. September 2008, 19:01

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

Wer ist online?

Mitglieder in diesem Forum: Google [Bot], pillmuncher