(gelöst)Problem beim interieren in einer for-Schleife

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.
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 18:31

Hallo liebe Community,

Ich habe leider folgendes Problem und ich hoffe ihr könnt mir helfen.
Also ich habe eine Liste, durch diese interiere ich mit einer for-Schleife ich versuche es zu mindestens. Das sieht dann so aus:

Code: Alles auswählen

liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "š", "E", "a", "b", "c", "d"]
for position in liste:
        if position >= chr(128):
            position = ord(position) - 127
            position = position * ?
            print position
Nun ja das Zeichen vor "E" ist ein Ascii-zeichen und nachdem ich es verglichen habe kommt dort 27 raus. Jetzt möchte ich die 27 * das "E" nehmen so das da dann "EEEEEEEEEEEEEEEEEEEEEEEEEEE" steht, nur ich weiss nicht wie ich auf das nächste Element zugreife in einer for-Schleife.
Das Fragezeichen oben im Code steht für meine Gedankenlücke =)

Mfg Schaf220
Zuletzt geändert von Schaf220 am Montag 29. September 2008, 17:17, insgesamt 1-mal geändert.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Montag 15. September 2008, 18:40

liste[position+1]
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 18:44

wenn ich das so mache sagt der mir immer list index out of range.

Code: Alles auswählen

position = position * liste[position + 1]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 18:49

Was soll denn der Quellcode machen? Im Moment sieht das eher nach einem Code-Unfall aus, der ausschaut wie Code, aber eigentlich keinen Sinn macht. Wie Lorem Ipsum etwa.

sea-life, das ist doch genauso falsch, da ``position`` unvorteilhafterweise ein Buchstabe und keine Zahl ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2435
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Montag 15. September 2008, 18:52

Leonidas hat geschrieben:sea-life, das ist doch genauso falsch, da ``position`` unvorteilhafterweise ein Buchstabe und keine Zahl ist.
Beim Fragezeichen nicht mehr, wobei wir wieder beim Code Unfall wären.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 18:55

DasIch hat geschrieben:
Leonidas hat geschrieben:sea-life, das ist doch genauso falsch, da ``position`` unvorteilhafterweise ein Buchstabe und keine Zahl ist.
Beim Fragezeichen nicht mehr, wobei wir wieder beim Code Unfall wären.
Ja, tatsächlich :lol:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Montag 15. September 2008, 18:57

so solte es gehen

Code: Alles auswählen

liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "š", "E", "a", "b", "c", "d"]
for position,chare in enumerate(liste):
        if chare >= chr(128):
            anzahl = ord(chare) - 127
            #position = position * ?
            print position
            print chare
            print anzahl
            chare_next = liste[position+1]
            print chare_next
            neu = anzahl * chare_next
            print neu
            liste[position+1] = neu
print liste
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 18:59

Also was ist jetzt noch unkla daran?
Ich möchte das Zeichen vielleicht wird es so eindeutiger:

Code: Alles auswählen

liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "27", "E", "a", "b", "c", "d"]
for position in liste:
        if position >= chr(128):
            position = ord(position) - 127
            position = position * ?
            print position
Und ich weiss nicht wie ich die 27 mal die nächste position nehmen soll.
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 19:00

ah ok ich probiere es mal aus danke
BlackJack

Montag 15. September 2008, 19:01

Werden soll das wohl eine Entpacker für Lauflängenkodierung.

Ich würde mit `iter()` einen Iterator über die Eingabedaten erzeugen und den vor der Schleife an einen Namen binden. Dann kann man an der entsprechenden Stelle in der Schleife die `next()`-Methode aufrufen um den Wert zu bekommen, der wiederholt werden soll.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Montag 15. September 2008, 19:03

@BlackJack das wäre die elegante methode
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 15. September 2008, 19:06

Was unklar ist? Na was das werden soll.

Code: Alles auswählen

>>> liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "27", "E", "a", "b", "c", "d"]
>>> for char in liste:
...   if char.isupper():
...      print ord(char) * char
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Montag 15. September 2008, 19:09

@leonidis
wenn er das E halt 27x in der liste hinter dem char(27) haben will bitte
is doch sein problem was das werden soll
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 19:09

Ach so sorry ich habe also wie Black Jack schon gesagt vor einen Entpacker zu coden und so sieht die gepackte Datei aus.
liste = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "š", "E", "a", "b", "c", "d"]
Das Ascii zeichen steht für die Wiederholung des folgenden Zeichen in dem Fall 27 das will ich jetzt wieder entpacken, also die 27 E wieder hin schreiben.
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Montag 15. September 2008, 19:25

Sorry ich verstehe den Code von dir Leonidas nicht genau ich habe es mal um gesetzt und dann sieht das jetzt so aus aber der Counter und des E sollen ja weg und dafür dei 27x E da stehen.
Ich lerne noch nicht sehr lange python deswegen verstehe ich noch nicht jeden code entschuldigung dafür es wäre gut wenn ihr euren Code erklären könntet, wenn es eucht nichts ausmacht.
Mfg Schaf220

Code: Alles auswählen

for char in data:
        if char.isupper():
            print ord(char) * char
            print char
        else:
            print char
So steh das jetzt bei mir aber klappt leider nicht so richtig.
Antworten