Bitwandler.py

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
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

Hallo,
ich hab 1 Script geschrieben, um Anfängern im Betrieb zu zeigen, wie Bitmanipulationen ,mit python gemacht werden.
Das liegt in der pastebin.
Kann man die Funktion setze nicht einfacher machen bzw. anders lösen? Es soll aber 1 String bleiben.
Ich will mit 4 bit auskommen damit es übersichtlich bleibt. Weiterhin will ich den Befefehlssatz des Intel 4004 zeigen auch für Anfänger, die dann am Beamer sehen können, was
1.der Befehlssatz
2.Adressierungsart
ist.

Danke Fritz
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

hier einmal der Link: http://www.python-forum.de/pastebin.php ... ght=python (einen Link macht man indem man auf den URL Button bei der Texteingabe klickt.)

deine 'setze'-Funktion kannst du kürzer schreiben, wahrscheinlich ist sie damit gar nicht mehr nötig:

Code: Alles auswählen

def setze(zahl):
    return "{0:04b}".format(zahl)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du müßtest den Link wohl noch nachschieben ;-)

Was ist konkret Deine zweite Frage? Vor allem: Wieso erstellst Du dafür nicht einen neuen Thread. Das passt inhaltlich doch überhaupt nicht zusammen! Somit wird wohl niemand etwas zum Inhalt sagen, der nicht zufällig über den Thread stolpert. Außerdem solltest Du da wesentlich mehr zu sagen und beschreiben, was Du eigentlich suchst. So versteht das kein Mensch und würde Dir nur antworten: "Dann drucke Dir den Befehlssatz aus und verteile ihn" ;-)

Nebenbei ist der inhaltliche Aufbau wieder extrem desolat. Wieso schließt sich Thema Nummer 2 direkt im selben Absatz an das alte Thema an? Ansonsten nutzt Du doch auch immer genau einen Absatz für einen Satz :P
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

BlackJack

@3ff: Gut dass Du ihnen nur das mit den Bits zeigen wolltest und nicht wie man in Python programmiert. SCNR

Die `setze()`-Funktion könnte man zuallererst einmal in etwas Bezeichnenderes umbenennen. Unter `setze()` hätte ich eine Funktion erwartet die ein bestimmtes Bit setzt, aber nicht eine Funktion die ganze Zahlen zwischen 0 und 15 in eine vierstellige Zeichenkette mit einer Darstellung der Zahl zur Basis 2 umwandelt.

Die Einrückung entspricht nicht den üblichen Konventionen.

Natürlich müsste man nicht in jedem ``elif``-Zweig eine Zuweisung an `j` *und* ein ``return`` stehen haben. Die Zeichenketten per Konkatenation von jeweils vier einzelnen Zeichen ist auch unnötige Tipparbeit gewesen. Und da Du eine Abbildung von Zahlen auf Zeichenketten hast, hättest Du die ganzen Verzweigungen auch ganz einfach durch einen Indexzugriff in eine Liste mit den Ergbnissen schreiben können.

Man hätte natürlich auch eine Funktion schreiben können, die das Ergebnis nicht aus einer Tabelle holt, sondern tatsächlich berechnet. Dann könnte man auch beliebig grosse Zahlen umwandeln. Auch wenn man bei 4-Bit bleiben möchte, wäre eine allgemeine Lösung hier IMHO vorzuziehen.

Klammern um Bedingungen sind unnötig und man sollte die Bedingung mit Klammern auch nicht so dicht an das Schlüsselwort rücken. ``if`` und Co. sind ja schliesslich keine Funktionen.

Statt die Zeichenkette "fejhler" (sic.) zurückzugeben, sollte man im Fehlerfall eine Ausnahme auslösen.

Bei den Funktionen zu den Bitoperationen ist wieder das unnötige Binden an `j`. Ausserdem gibt's die Funktionen schon fertig im `operator`-Modul.

`string.atoi()` sollte man nicht mehr verwenden. Die `int()`-Funktion existiert.
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@DaMutz,
Danke werds versuchen, aber es sieht gut aus.
Frage:
Wie find ich denn Deinen Link wieder?
Auf den Button URL clicken aber welche URL geb ich ein?
Ist die URL immer die gleiche für die Pastebin?
@Hyperion,
den Befehlssatz kopieren?
den will ich ja grade erklären als Bitmuster
Grüße Fritz
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@DaMutz
danke, es geht.
der neue Code steht auch in der Pastebin
muss ich jetzt die gleiche URL angeben, wie Du?
ganz verstanden hab ich ichs noch nicht, aber das muß ich erstmal in aller Ruhe in meiner Python-Bibel nachlesen.
Guude!
Fritz
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@DaMutz
in der Pastebin liegt format-1.py. Jetzt hab ich auch verstanden, was Du gemacht hast.
danke nochmal!
http://www.python-forum.de/pastebin.php ... ght=python



Fritz :D
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@Hyperion und die anderen "Quälgeister"
Antwort gibts später, bin erstmal froh, das es mit dem Quelverweis zur Pastentonne geklappt hat.
Deutsches Sprichwort: Man wird so alt wie jede Kuh und lernt immer noch dazu
Fritz :D :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

3ff hat geschrieben: Deutsches Sprichwort: Man wird so alt wie jede Kuh und lernt immer noch dazu
Die Kuh trinkt Wasser und kein Rum, nach 20 Jahren fällt sie um! ;-) *spuk*
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@Hyperion
Du hast geschrieben:
Die Kuh trinkt Wasser und kein Rum, nach 20 Jahren fällt sie um!
esta bueno!
Ich besorg mir heute morgen den Befehlssatz vom 8080, dann gehts los.
Fritz
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

3ff hat geschrieben:@Hyperion
Du hast geschrieben:
Die Kuh trinkt Wasser und kein Rum, nach 20 Jahren fällt sie um!
Wow! Dein erstes Quoting - langsam wirds ;-)
esta bueno!
Ich besorg mir heute morgen den Befehlssatz vom 8080, dann gehts los.
Fritz
Ich dachte 4004? Den konnte man via wikipedia recht schnell auftreiben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Unter Bitmanipulation würde ich den Einsatz der &, |, ^ und ~ Operatoren verstehen, nicht jedoch, wie man Zahlen zur Basis 2 darstellt.

Neulich hat doch jemand einen kompletten Z-80-Emulator in JavaScript (als Teile eines Gameboy-Emulators) vorgestellt. Da der 4004 ja nur 2 Seiten mit Instruktionen hat und sehr einfach aufgebaut ist, könnte man doch schnell einen 4004-Emulator in Python bauen und an diesem dann die Bitmanipulation erklären. 0x42 0x56 wäre ja z.B. ein Sprung zur Adresse 0x256. Offenbar kann man ja an den höheren 4 Bit des Befehlsbytes erkennen, was für ein Befehl bzw. was für eine Befehlsgruppe das ist und die unteren 4 Bit sind dann Operand oder der genaue Befehl. Einige Befehle haben ein zweites Byte als Operand. Mit zwei verschachtelten Sprungtabellen oder einfach langen if/elif-Kaskaden kann man hier den Befehl erkennen und dann simulieren. An Registern gibt es offenbar IP, SP, A und 16 Indexregister. Außerdem habe ich beim Überfliegen der Spec die Flags C (carry), T (test) und Z (zero) gesehen. Das könnten alles Attribute eines Exemplars einer Klasse "I4004" sein, die Befehle jeweils Methoden.

Stefan
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@Hyprion
Gut Ding will Weil haben, aber ohne den richtigen Coach (hier DaMutz) wirds halt nichts.
Zum Bitwandler: stellt euch nichts kompliziertes vor. Ich werd/muß Vorträge halten mit dem Beamer und die Umrechnung Hex-> Bin macht dies Programm.
Auf Maschinenebene läuft natürlich alles im Bitcode ab. Die Darstellung ist in Latex, was wiederum hier offtopic wäre.
Meine Zuhörer wissen grad mal was der Binärkode ist, von Subtraktion im 2-er Kompliment haben die noch nichts gehört.
Ich hab auch 1 Buch gefunden über den Intel 8080.
Zur Darstellung der Blockschema wird Autocad genommen- also dxf-Dateien- und 1 Convertierungsprogramm in Python, für viele kalter kaffee, aber für die Newbees wichtig, die Grundlagen zu erlernen.
Es ist auch nicht damit getan, den Befehlssatz "runterzubeten" sondern man kann die Struktur einer 1 Adessmaschine nur verstehen, wenn man DIE 3 Grundfunktionen kennt:
1.Befehl reinholen
2. Befehl decodieren
3. Befehl ausführen
Nochwas: ich werd auch 1 neue Rublik (Thread) aufmachen!
Gut für heute erstmal!
Grüße Fritz
8) 8)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

3ff hat geschrieben:@Hyprion
Gut Ding will Weil haben, aber ohne den richtigen Coach (hier DaMutz) wirds halt nichts.
Genau, hier ja. In anderen Threads waren es auch schon andere. Aber immerhin ist ja nun Bereitschaft vorhanden ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@Hyperion
als Akkordeonspieler sag ich dazu:
Immer langsam voran, immer langsam voran, damit der Krähwinkler Landsturm folgen kann.
Das ist 1 altes Karnevalslied hier aus Mainz.
Helau
Fritz 8) 8)
Antworten