Liste streickt

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.
Antworten
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Für ein Skript brauch ich eine liste der Binärzahlen von 0-256:

Code: Alles auswählen

ASCII=[00000000, 
       00000001,
       00000010,
       00000011,
       00000100,
       00000101,
       00000110,
       00000111, 
       00001000, 
       ...
       11111111]
Das erste Element kennt Python beim zweiten gibt's ne fehlermeldung. Ich vermutte das es daran liegt dass eine Zahl nicht mit null beginnen kann, wenn ich recht habe wie krieg ich das ohne strings hin, naturlich nur wenn's geht?
Zuletzt geändert von Py-Prog am Dienstag 7. September 2010, 18:48, insgesamt 1-mal geändert.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Binaerzaehlen sind nur eine Repraesentation von Zahlen, anders als mit Strings kommst du dem Problem nicht zurande. Das ist uebrigens ein Tupel und keine Liste.
Binaerliterale haben den Praefix `0b`

Wie immer sind Fehlermeldungen hilfreich ...
BlackJack

@Py-Prog: Wie willst Du das ohne Zeichenketten hinbekommen? Wenn es Zahlen sein sollen, dann kannst Du auch einfach 0, 1, 2, 3, … hinschreiben. Zahlen sind weder Binär noch Dezimal. Diese Eigenschaft haben nur Zeichenkettendarstellungen von Zahlen.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Dann nehm ich strings. (Und noch 512 hochkommas schreiben :roll: )


Danke für die schnelle hilfe.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

for i in range(512):
    print "{0:b}".format(i)
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Ja, endlich fertig, und wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Py-Prog hat geschrieben:wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:
Das schliesst sich so ziemlich aus.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Was soll das heisen? :K
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn du die Zahlen von 1 bis 1000 brauchst, schreibst du die dann auch alle "mit der Hand" in eine Liste und lässt sie anschließend ausgeben?
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Nein, das mache ich nicht mit der hand sondern so:

Code: Alles auswählen

liste=[]
for i in range(1000):
    i.append(liste)
nur geht es in diesem fall schwer. Ich hab auch versucht eine funktion zu schreiben die diese liste erzeut, hat nicht geklappt.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

mit rekursion:

Code: Alles auswählen

def make_list_of_first_n_ints(deep, n=0):
    if n == deep:
        return []
    return [n]+make_list_of_first_n_ints(deep, n+1)

print make_list_of_first_n_ints(10)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Py-Prog hat geschrieben:Nein, das mache ich nicht mit der hand sondern so:

Code: Alles auswählen

liste=[]
for i in range(1000):
    i.append(liste)
Ja, das ist echt praktisch. Dann muss man ja bloß noch die Null vorne abschneiden und hinten die 1000 dranhängen.
Ich hab' es bisher immer so gemacht:

Code: Alles auswählen

from random import randrange

numbers = set()
while len(numbers)<1000:
    numbers.add(randrange(1,1001))
print sorted(numbers)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@numerix:

Für sowas gibt es doch sample!

Code: Alles auswählen

from random import sample
print sorted(sample(xrange(1,1001), 1000))
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Für einen so komplizierten Sachverhalt sollte man niemals den funktionalen Ansatz außen vor lassen:

Code: Alles auswählen

myrange = lambda x, y=0, z=1, l=[] : ((myrange(x,y-1,z,l) if (y-1-x)%z else myrange(x,y-1,z,l+[y-1])) if y>x else l.reverse() or l) if y else (myrange(x=x-1,l=l+[x-1]) if x>0 else l.reverse() or l)
:twisted: SCNR

PS: Funktion verhält sich nicht ganz wie das Original ;)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Py-Prog hat geschrieben:Ja, endlich fertig, und wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:
Deine Aussage solltest du mal prüfen: Bei 256*8 Zeichen und einer Fehler auf 1000 Buchstaben ist mit über 87% ein Fehler dabei. Bei 2/1000 sind es schon 98%, bei 3/1000 bereits 99,8%.
Das Leben ist wie ein Tennisball.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Verdammt, die Rekursionsfunktion geht nicht bis 1000 bei mir :(
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Es gibt immer noch die 13%, Es hätte ja sein können das ich sowas passiert:

Code: Alles auswählen

01011010
(01011011)
01011100
ist es aber nicht.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Um RAM zu sparren kann man in einigen fällen auch einen Generator verwenden.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Antworten