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

Code: Alles auswählen

new[i]
auf ein Listenelement zugreifst und diesem
dann nichts zuweisen kannst. Dies wäre die passende
Syntax für ein Dictionary
Was du willst ist:

Code: Alles auswählen

new.append(EINTRAG)

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

Code: Alles auswählen

new[i] = ord(strD[i])
existiert der Index 0 nicht, die Liste ist leer.

Um deinen Code zum laufen zu bringen, würde es reichen, stattdessen

Code: Alles auswählen

new.append(...) 
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 ;)