Seite 1 von 1
neue Liste erzeugen
Verfasst: Mittwoch 30. August 2006, 09:55
von gorba
Wiso funktioniert folgende strucktur nicht? Ich kriege es nicht hin, dass new als liste "anerkannt" wird. :S
Code: Alles auswählen
def ordData(strD):
i = 0
new = []
while(i<len(strD)):
new[i] = ord(strD[i])
i = i + 1
return new
Verfasst: Mittwoch 30. August 2006, 10:11
von pr0stAta
Weil du mit
auf ein Listenelement zugreifst und diesem
dann nichts zuweisen kannst. Dies wäre die passende
Syntax für ein Dictionary
Was du willst ist:
Verfasst: Mittwoch 30. August 2006, 10:12
von Nirven
Wie wäre es damit?
Code: Alles auswählen
def ordData(strD):
new = []
for i in strD:
new.append(ord(i))
return new
Verfasst: Mittwoch 30. August 2006, 10:12
von gorba
denke hab die Lösung gefunden:
Code: Alles auswählen
def ordData(strD):
i = 0
new = list()
while(i<len(strD)):
val = ord(strD[i])
new.append(val)
i = i + 1
return new
thx pr0stAta für die Hilfe
Verfasst: Mittwoch 30. August 2006, 10:13
von keppla
es WIRD als Liste anerkannt. In python haben Listen jedoch die Eigenschaft, dass das Zuweisen von nichtexistenten Indizes ein Fehler ist.
Genauer, bei
existiert der Index 0 nicht, die Liste ist leer.
Um deinen Code zum laufen zu bringen, würde es reichen, stattdessen
zu schreiben.
Allerdings geht das ganze noch einfacher.
1. musst du nicht über indizes Iterieren,
Code: Alles auswählen
def ordData(strD):
new = []
for char in strD:
new.append(ord(char))
return new
wäre da die bessere Lösung.
Und wenn man dann 2. noch "list comprehensions" kennt, kann man folgendes machen:
Code: Alles auswählen
def ordData(strD):
return [ ord(char) for char in strD ]
und hat das gleiche.
Verfasst: Mittwoch 30. August 2006, 12:37
von BlackJack
Es ginge auch: ``new = map(ord, string)``
Verfasst: Mittwoch 30. August 2006, 13:53
von gorba
wow, sehr kompakt. Ich brauchte sehr viel mehr Zeilen um das Problem zu lösen. In zukunft werde ich mich von index fernhalten

Thx
Kann ich eigentlich in Python ein dubbleword in ein word konvertieren? Ich habe das bis jetzt so gemacht:
Code: Alles auswählen
SizeOfImage = 0x01020304
word2 = SizeOfImage & 0x0000FFFF
tmp2 = SizeOfImage >> 16
word3 = tmp2 & 0x0000FFFF
Aber das liefert dann komische ausgaben mit einem L hinter dem Wert :S
edit: bez. von dubbleword zu zwei einzelnen word
Verfasst: Mittwoch 30. August 2006, 17:05
von BlackJack
Mal abgesehen davon das es "doubleword" heisst, ist Deine Methode schon die richtige. Kann man natürlich auch wieder kompakter schreiben:
Code: Alles auswählen
doubleword = 0x01020304
low_word, high_word = doubleword & 0x0000FFFF, doubleword >> 16 & 0x0000FFFF
Das `L` ist nur ein Kennzeichen dafür, das es sich um ein Objekt vom Typ `long` handelt. Das kannst Du in den allermeisten Fällen einfach ignorieren.
Verfasst: Mittwoch 30. August 2006, 22:38
von Michael Schneider
Hi,
Python hat einen Typ doubleword? Soviel ich weiß hat es nur Integer (4 Bytes ) und Long, wobei long nur vom Speicher des Rechners begrenzt wird - also auch mehrere Millionen stellen haben kann. Bitte korrigiert mich, wenn ich ein falsches Python-äh-Weltbild habe.
Grüße,
Michael
Verfasst: Donnerstag 31. August 2006, 11:39
von BlackJack
Nein, dein Weltbild ist in Ordnung. Kannst aufatmen.

Verfasst: Donnerstag 31. August 2006, 14:46
von gorba
danke für die super hilfen! Hat mir weitergeholfen, auch wenn ich immernoch zuviele Zeilen brauche um das ganze zu codieren

Verfasst: Freitag 1. September 2006, 02:31
von keppla
BlackJack hat geschrieben:Es ginge auch: ``new = map(ord, string)``
ok, du hast gewonnen
