
Hallo Herr Schnoor,
hier komnmt der Code: if modus == "x": ziffer = input(" insert <index>number > ") point = nachdez(basis,ziffer) point = int(point) zeichen = chr(point) digit = nachsys(2,point) print(" Digit: ",digit) print() print(" sign: ",zeichen) print(" point: ",point ) print(" binär: ",digit) lg = len(digit) print(" bit: ",lg)
den habe ich etwas verbessert: def decodeIndex(index, ziffern): """ index : ein Zahlzeichen (aus beliebig vielen Ziffern) des Positionssystems zur Basis b = len(ziffern) Voreinstellung: b = 4096 ziffern : Ziffernstring (aus UTF8-Zeichen) zur Notation von Zahlzeichen dieses Positionsystems index codiert die dezimale Ordnungsnummer point = ord(ch) eines UTF8-Zeichens ch also index = nachsys(basis, point, ziffern) zulässige Werte für index: index < nachsys(basis, 2**24-1, ziffern) """ MaxUTF8 = 1114111 point = nachdez(basis, index, ziffern) # point = ord(ch) eines UTF8-Zeichens ch digit = nachsys(2, point, ziffern) # point = ord(ch) als Dualzahl print("\nIndex: %s" % index) print(" Dual: ", digit) print(" point: ", point ) # print(" binär: ", digit) # irreführende Bezeichnung: dual != binär # siehe: https://www.danisch.de/blog/2024/07/26/vom-unterschied-zwischen-einem-binaer... lg = len(digit) # Anzahl der Dualziffern (0,1) von digit print(" bit: ", lg) # irreführende Bezeichnung: Dualziffer != bit if point > MaxUTF8: print("Fehler: point > %d" % MaxUTF8) print("ValueError: chr() arg not in range(0x110000)") return zeichen = chr(point) # UTF8-Zeichen, ord(zeichen) = point print(" sign: ", zeichen) und damit etwas herumgespielt: for k in range(4, 18, 2): point = 2**(2*k) - 1 index = nachsys(basis, point, ziffern) decodeIndex(index, ziffern) ergibt: Basis : 4096 Index: Ɖ Dual: 11111111 point: 255 bit: 8 sign: ÿ Index: ꓰ Dual: 111111111111 point: 4095 bit: 12 sign: Index: Fꓰ Dual: 1111111111111111 point: 65535 bit: 16 sign: Index: Ɖꓰ Dual: 11111111111111111111 point: 1048575 bit: 20 sign: Index: ꓰꓰ Dual: 111111111111111111111111 point: 16777215 bit: 24 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000) Index: Fꓰꓰ Dual: 1111111111111111111111111111 point: 268435455 bit: 28 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000) Index: Ɖꓰꓰ Dual: 11111111111111111111111111111111 point: 4294967295 bit: 32 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000) ------------------------------ Da Sie -- vielleicht wegen des Sommerwetters? -- offensichtlich nur CPM-Codeschnipsel-Gedöns und etwas Python sprechen können, muss ich wohl oder übel meine Frage Muß in einem längeren Indexstring aus einziffrigen (Typ A) und mehrziffrigen (Typ B) 4096-er Systemzahlen zwischen diesen unterschiedlichen Zeichentypen ein Trennzeichen (z.B. Leerzeichen) stehen? selbst beantworten, und zwar mit einem JA. Dies vollkommen analog dem Leerzeichen, um zwischen den drei Zahlen 4711 und 47 11 unterscheiden zu können. Was bedeutet das für den Byte-Gehalt B(N) der beiden Nachrichten, (1) der Original-Nachricht (= N1) eines Textes aus -- clever konzipierten -- UTF8-Zeichen und (2) der zu Index-Zahlen des 4096-er Systems übersetzten Nachricht (= N2) -- "angereichert'' mit Leerzeichen zwecks Zahlzeichentrennung? Ich denke, das bedeutet B(N2) > B(N1). Oder irre ich mich da? W. Büchel

Sehr geehrter Herr Büchel, was Sie da aufzeigen, mag ja interessant sein, hat aber mit den <index>Ziffern nichts zu tun. Für <index>Ziffern gelten weder “Bits” noch ”Bytes”, sondern ausschließliich die Position der Ziffer im String. (Positionswert). Das müsste m.E. eigentlich klar geworden sein. mfg Erich Schnoor
Anfang der weitergeleiteten Nachricht:
Von: Wolli Buechel über python-de <python-de@python.org> Betreff: [Python-de] Codepage-Methode vs. UTF8 Datum: 16. August 2024 um 20:56:43 MESZ An: python-de@python.org Antwort an: Wolli Buechel <wjb131@web.de>
Hallo Herr Schnoor,
hier komnmt der Code: if modus == "x": ziffer = input(" insert <index>number > ") point = nachdez(basis,ziffer) point = int(point) zeichen = chr(point) digit = nachsys(2,point) print(" Digit: ",digit) print() print(" sign: ",zeichen) print(" point: ",point ) print(" binär: ",digit) lg = len(digit) print(" bit: ",lg)
den habe ich etwas verbessert:
def decodeIndex(index, ziffern): """ index : ein Zahlzeichen (aus beliebig vielen Ziffern) des Positionssystems zur Basis b = len(ziffern) Voreinstellung: b = 4096 ziffern : Ziffernstring (aus UTF8-Zeichen) zur Notation von Zahlzeichen dieses Positionsystems
index codiert die dezimale Ordnungsnummer point = ord(ch) eines UTF8-Zeichens ch also index = nachsys(basis, point, ziffern) zulässige Werte für index: index < nachsys(basis, 2**24-1, ziffern) """ MaxUTF8 = 1114111 point = nachdez(basis, index, ziffern) # point = ord(ch) eines UTF8-Zeichens ch digit = nachsys(2, point, ziffern) # point = ord(ch) als Dualzahl print("\nIndex: %s" % index) print(" Dual: ", digit) print(" point: ", point ) # print(" binär: ", digit) # irreführende Bezeichnung: dual != binär # siehe: https://www.danisch.de/blog/2024/07/26/vom-unterschied-zwischen-einem-binaer... lg = len(digit) # Anzahl der Dualziffern (0,1) von digit print(" bit: ", lg) # irreführende Bezeichnung: Dualziffer != bit if point > MaxUTF8: print("Fehler: point > %d" % MaxUTF8) print("ValueError: chr() arg not in range(0x110000)") return zeichen = chr(point) # UTF8-Zeichen, ord(zeichen) = point print(" sign: ", zeichen)
und damit etwas herumgespielt:
for k in range(4, 18, 2): point = 2**(2*k) - 1 index = nachsys(basis, point, ziffern) decodeIndex(index, ziffern)
ergibt:
Basis : 4096
Index: Ɖ Dual: 11111111 point: 255 bit: 8 sign: ÿ
Index: ꓰ Dual: 111111111111 point: 4095 bit: 12 sign:
Index: Fꓰ Dual: 1111111111111111 point: 65535 bit: 16 sign:
Index: Ɖꓰ Dual: 11111111111111111111 point: 1048575 bit: 20 sign:
Index: ꓰꓰ Dual: 111111111111111111111111 point: 16777215 bit: 24 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000)
Index: Fꓰꓰ Dual: 1111111111111111111111111111 point: 268435455 bit: 28 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000)
Index: Ɖꓰꓰ Dual: 11111111111111111111111111111111 point: 4294967295 bit: 32 Fehler: point > 1114111 ValueError: chr() arg not in range(0x110000)
------------------------------
Da Sie -- vielleicht wegen des Sommerwetters? -- offensichtlich nur CPM-Codeschnipsel-Gedöns und etwas Python sprechen können, muss ich wohl oder übel meine Frage
Muß in einem längeren Indexstring aus einziffrigen (Typ A) und mehrziffrigen (Typ B) 4096-er Systemzahlen zwischen diesen unterschiedlichen Zeichentypen ein Trennzeichen (z.B. Leerzeichen) stehen?
selbst beantworten, und zwar mit einem JA. Dies vollkommen analog dem Leerzeichen, um zwischen den drei Zahlen 4711 und 47 11 unterscheiden zu können.
Was bedeutet das für den Byte-Gehalt B(N) der beiden Nachrichten, (1) der Original-Nachricht (= N1) eines Textes aus -- clever konzipierten -- UTF8-Zeichen und (2) der zu Index-Zahlen des 4096-er Systems übersetzten Nachricht (= N2) -- "angereichert'' mit Leerzeichen zwecks Zahlzeichentrennung?
Ich denke, das bedeutet B(N2) > B(N1).
Oder irre ich mich da?
W. Büchel _______________________________________________ python-de Mailingliste -- python-de@python.org Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an python-de-leave@python.org https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: eschnoor@multi-matrix.de

Hallo Herr Schnoor,
was Sie da aufzeigen, mag ja interessant sein, hat aber mit den <index>Ziffern nichts zu tun. Für <index>Ziffern gelten weder “Bits” noch ”Bytes”, sondern ausschließlich die Position der Ziffer im String. (Positionswert).
Diese Bit- und Byte-Abstinenz besagter Index-Ziffern haben Sie danach in einer privaten Mail demonstriert anhand von 8 Exemplaren mit CPM-Output-Gedöns (leider wieder aus unbegreiflichen Gründen nicht in Worten begründet oder erläutert), und zwar so: =============== ZITAT-ANFANG ================ hier kommt meine Aufstellung der <index>Ziffern: chose mode > S Basis: 4096 insert system number: E E result: 40 insert system number: 10 10 result: 4096 4 insert system number: 1E 1E result: 4136 4 Die <index>Ziffer "1E" steht in der Position [4096 + 40 = 4136]. insert system number: 20 20 result: 8192 4 insert system number: 2E 2E result: 8232 4 Die <index>Ziffer "2E" steht in der Position [8192 + 40 = 8232] insert system number: 30 30 result: 12288 5 insert system number: 3E 3E result: 12328 5 Die <index>Ziffer "3E" steht in der Position [12288 + 40 = 12328] insert system number: EE EE result: 163880 6 insert system number: E0 E0 result: 163840 6 Die <index>Ziffer "E0" steht in der Position [13880- 40 = 163840] insert system number: KK0 KK0 result: 771940352 9 insert system number: KKE KKE result: 771940392 Das sollte doch genügen. =============== ZITAT-ENDE ============= Da wird lediglich jede Indexzahl in eine äquivalente Dezimalzahl unmgewandelt. Dies zeigt auch der mir zugesandte Programmcode der Datei Zahlensysteme.py: ================================================================== elif modus == "S": # ----------------System -> Dezimal ----------------------- system = basis system = int(system) print() print() syszahl = input(" Eingabe System-Zahl: ") print("",syszahl) basis = system ergebnis = nachdez(basis,syszahl) ## Konvertierung der 4096-er Zahl <syszahl> in ein dezimales Äquivalent print(" Ergebnis: ",ergebnis) ergebnis = str(ergebnis) print(" ",len(ergebnis)) print() ======================================================== Diesen Code habe ich komprimiert und etwas erweitert, um zu zeigen, daß bei ALLEN beteiligten Variablen (index, syszahl, ergebnis) ÜBERRASCHENDERWEISE Bits und Bytes herauszukitzeln sind: ###################### from CPZiffernS import ziffern from tools24 import * basis = len(ziffern) print(len(ziffern) == len(set(ziffern))) print("Basis : %d" % basis) # modus == "S": # System -> Dezimal index = "E 10 1E 20 2E 30 3E EE E0 KK0 KKE".split() for idx in index: index10 = nachdez(basis, idx, ziffern) numZeichen = len(idx) numBytes = len(bytes(idx, 'utf8')) Bytes = [ f'{x:08b}' for x in bytes(idx, 'utf8') ] print("index : %9s\t(%d Zeichen ; %d Byte : %s)" % (idx, numZeichen, numBytes, Bytes)) print("index10 : %9s\t(%d Zeichen ; %d Byte)\n" % (index10, len(str(index10)), len(str(index10)))) ================================================================================== mit folgendem Ergebnis: Basis : 4096 index : E (1 Zeichen ; 1 Byte = ['01000101']) index10 : 40 (2 Zeichen ; 2 Byte) index : 10 (2 Zeichen ; 2 Byte = ['00110001', '00110000']) index10 : 4096 (4 Zeichen ; 4 Byte) index : 1E (2 Zeichen ; 2 Byte = ['00110001', '01000101']) index10 : 4136 (4 Zeichen ; 4 Byte) index : 20 (2 Zeichen ; 2 Byte = ['00110010', '00110000']) index10 : 8192 (4 Zeichen ; 4 Byte) index : 2E (2 Zeichen ; 2 Byte = ['00110010', '01000101']) index10 : 8232 (4 Zeichen ; 4 Byte) index : 30 (2 Zeichen ; 2 Byte = ['00110011', '00110000']) index10 : 12288 (5 Zeichen ; 5 Byte) index : 3E (2 Zeichen ; 2 Byte = ['00110011', '01000101']) index10 : 12328 (5 Zeichen ; 5 Byte) index : EE (2 Zeichen ; 2 Byte = ['01000101', '01000101']) index10 : 163880 (6 Zeichen ; 6 Byte) index : E0 (2 Zeichen ; 2 Byte = ['01000101', '00110000']) index10 : 163840 (6 Zeichen ; 6 Byte) index : KK0 (3 Zeichen ; 3 Byte = ['01001011', '01001011', '00110000']) index10 : 771940352 (9 Zeichen ; 9 Byte) index : KKE (3 Zeichen ; 3 Byte = ['01001011', '01001011', '01000101']) index10 : 771940392 (9 Zeichen ; 9 Byte)

Sehr geehrter Herr Büchel, meine Aussage bezieht sich ausschlisßlich auf die Generierung der <index>Ziffer, nicht jedoch auf ihre Bestimmung als <point>Zahl zur Codierung eine Unicode-Zeichens. Das eine ist “input” und das anderte “output”, o.K.? mfg Erich Schnoor
Anfang der weitergeleiteten Nachricht:
Von: Wolli Buechel über python-de <python-de@python.org> Betreff: [Python-de] Re: Fwd: Codepage-Methode vs. UTF8 Datum: 17. August 2024 um 12:13:27 MESZ An: python-de@python.org Antwort an: Wolli Buechel <wjb131@web.de>
Hallo Herr Schnoor,
was Sie da aufzeigen, mag ja interessant sein, hat aber mit den <index>Ziffern nichts zu tun. Für <index>Ziffern gelten weder “Bits” noch ”Bytes”, sondern ausschließlich die Position der Ziffer im String. (Positionswert).
Diese Bit- und Byte-Abstinenz besagter Index-Ziffern haben Sie danach in einer privaten Mail demonstriert anhand von 8 Exemplaren mit CPM-Output-Gedöns (leider wieder aus unbegreiflichen Gründen nicht in Worten begründet oder erläutert), und zwar so:
=============== ZITAT-ANFANG ================ hier kommt meine Aufstellung der <index>Ziffern:
chose mode > S Basis: 4096
insert system number: E E result: 40 insert system number: 10 10 result: 4096 4 insert system number: 1E 1E result: 4136 4 Die <index>Ziffer "1E" steht in der Position [4096 + 40 = 4136].
insert system number: 20 20 result: 8192 4 insert system number: 2E 2E result: 8232 4 Die <index>Ziffer "2E" steht in der Position [8192 + 40 = 8232]
insert system number: 30 30 result: 12288 5 insert system number: 3E 3E result: 12328 5 Die <index>Ziffer "3E" steht in der Position [12288 + 40 = 12328]
insert system number: EE EE result: 163880 6 insert system number: E0 E0 result: 163840 6 Die <index>Ziffer "E0" steht in der Position [13880- 40 = 163840]
insert system number: KK0 KK0 result: 771940352 9 insert system number: KKE KKE result: 771940392
Das sollte doch genügen. =============== ZITAT-ENDE =============
Da wird lediglich jede Indexzahl in eine äquivalente Dezimalzahl unmgewandelt.
Dies zeigt auch der mir zugesandte Programmcode der Datei Zahlensysteme.py:
================================================================== elif modus == "S": # ----------------System -> Dezimal -----------------------
system = basis system = int(system) print() print() syszahl = input(" Eingabe System-Zahl: ") print("",syszahl)
basis = system ergebnis = nachdez(basis,syszahl) ## Konvertierung der 4096-er Zahl <syszahl> in ein dezimales Äquivalent print(" Ergebnis: ",ergebnis) ergebnis = str(ergebnis) print(" ",len(ergebnis)) print() ========================================================
Diesen Code habe ich komprimiert und etwas erweitert, um zu zeigen, daß bei ALLEN beteiligten Variablen (index, syszahl, ergebnis) ÜBERRASCHENDERWEISE Bits und Bytes herauszukitzeln sind:
###################### from CPZiffernS import ziffern from tools24 import *
basis = len(ziffern) print(len(ziffern) == len(set(ziffern))) print("Basis : %d" % basis)
# modus == "S": # System -> Dezimal index = "E 10 1E 20 2E 30 3E EE E0 KK0 KKE".split() for idx in index: index10 = nachdez(basis, idx, ziffern) numZeichen = len(idx) numBytes = len(bytes(idx, 'utf8')) Bytes = [ f'{x:08b}' for x in bytes(idx, 'utf8') ] print("index : %9s\t(%d Zeichen ; %d Byte : %s)" % (idx, numZeichen, numBytes, Bytes)) print("index10 : %9s\t(%d Zeichen ; %d Byte)\n" % (index10, len(str(index10)), len(str(index10)))) ==================================================================================
mit folgendem Ergebnis:
Basis : 4096 index : E (1 Zeichen ; 1 Byte = ['01000101']) index10 : 40 (2 Zeichen ; 2 Byte)
index : 10 (2 Zeichen ; 2 Byte = ['00110001', '00110000']) index10 : 4096 (4 Zeichen ; 4 Byte)
index : 1E (2 Zeichen ; 2 Byte = ['00110001', '01000101']) index10 : 4136 (4 Zeichen ; 4 Byte)
index : 20 (2 Zeichen ; 2 Byte = ['00110010', '00110000']) index10 : 8192 (4 Zeichen ; 4 Byte)
index : 2E (2 Zeichen ; 2 Byte = ['00110010', '01000101']) index10 : 8232 (4 Zeichen ; 4 Byte)
index : 30 (2 Zeichen ; 2 Byte = ['00110011', '00110000']) index10 : 12288 (5 Zeichen ; 5 Byte)
index : 3E (2 Zeichen ; 2 Byte = ['00110011', '01000101']) index10 : 12328 (5 Zeichen ; 5 Byte)
index : EE (2 Zeichen ; 2 Byte = ['01000101', '01000101']) index10 : 163880 (6 Zeichen ; 6 Byte)
index : E0 (2 Zeichen ; 2 Byte = ['01000101', '00110000']) index10 : 163840 (6 Zeichen ; 6 Byte)
index : KK0 (3 Zeichen ; 3 Byte = ['01001011', '01001011', '00110000']) index10 : 771940352 (9 Zeichen ; 9 Byte)
index : KKE (3 Zeichen ; 3 Byte = ['01001011', '01001011', '01000101']) index10 : 771940392 (9 Zeichen ; 9 Byte) _______________________________________________ python-de Mailingliste -- python-de@python.org Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an python-de-leave@python.org https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: eschnoor@multi-matrix.de
participants (2)
-
Erich Schnoor
-
Wolli Buechel