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
Bitwandler.py
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:
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)
- 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
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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
>>> "{0:b}".format(15)
'1111'
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@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.
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.
@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
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
@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
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
@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
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
@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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die Kuh trinkt Wasser und kein Rum, nach 20 Jahren fällt sie um! *spuk*3ff hat geschrieben: Deutsches Sprichwort: Man wird so alt wie jede Kuh und lernt immer noch dazu
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wow! Dein erstes Quoting - langsam wirds3ff hat geschrieben:@Hyperion
Du hast geschrieben:Die Kuh trinkt Wasser und kein Rum, nach 20 Jahren fällt sie um!
Ich dachte 4004? Den konnte man via wikipedia recht schnell auftreiben.esta bueno!
Ich besorg mir heute morgen den Befehlssatz vom 8080, dann gehts los.
Fritz
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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
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
@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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Genau, hier ja. In anderen Threads waren es auch schon andere. Aber immerhin ist ja nun Bereitschaft vorhanden3ff hat geschrieben:@Hyprion
Gut Ding will Weil haben, aber ohne den richtigen Coach (hier DaMutz) wirds halt nichts.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert