Hallo liebes Forum.
Ich habe eine Frage bzgl. einer Hausaufgabe.
Die Angabe lautet wie folgt:
Erstelle eine ASCII Tabelle -> in der ersten Spalte links stehen die Zahlen von 0 - 240 in 20er Schritten. Über der Tabelle in der ersten Zeile steht 0 - 19.
Ich hoffe ihr könnt euch was drunter vorstellen.
Eigentlich haut auch alles hin, verschachtelte for Schleifen, umwandeln mit chr... Alles kein Problem.
Nur weiß ich leider nicht, wie ich das ganze in Tabellenform bekommen.
Also es geht mir rein um die Formatierung.
Eigentlich würde ich, wenn ich die Aufgabe nicht grad morgen abgeben müsste, selber recherchieren... Mein Zeitmanagment halt
Danke im Voraus!
MfG
Formatierung
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Die `format()`-Methode auf Zeichenketten und da die ”Minisprache” für die Formatspezifikation sollte man noch kennen, um beispielsweise Platzhalter die in Zeichenketten formatiert werden auf eine bestimmte Breite aufzufüllen. Das steht alles, samt Beispielen, in der Dokumentation vom `string`-Modul in der Standardbibliothek.
Edit: Bis 240 ist viel zu weit. ASCII geht nur bis 127. Was soll denn nach 127 in der Tabelle angezeigt werden? Auszug aus der Linux ASCII Manpage:
Edit: Bis 240 ist viel zu weit. ASCII geht nur bis 127. Was soll denn nach 127 in der Tabelle angezeigt werden? Auszug aus der Linux ASCII Manpage:
Code: Alles auswählen
2 3 4 5 6 7 30 40 50 60 70 80 90 100 110 120
------------- ---------------------------------
0: 0 @ P ` p 0: ( 2 < F P Z d n x
1: ! 1 A Q a q 1: ) 3 = G Q [ e o y
2: " 2 B R b r 2: * 4 > H R \ f p z
3: # 3 C S c s 3: ! + 5 ? I S ] g q {
4: $ 4 D T d t 4: " , 6 @ J T ^ h r |
5: % 5 E U e u 5: # - 7 A K U _ i s }
6: & 6 F V f v 6: $ . 8 B L V ` j t ~
7: ' 7 G W g w 7: % / 9 C M W a k u DEL
8: ( 8 H X h x 8: & 0 : D N X b l v
9: ) 9 I Y i y 9: ' 1 ; E O Y c m w
A: * : J Z j z
B: + ; K [ k {
C: , < L \ l |
D: - = M ] m }
E: . > N ^ n ~
F: / ? O _ o DEL
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Hallo, danke für euer Antworten! Die Formatierung habe ich jetzt schon hinbekomen.. Das ist mein Code momentan. Danke!
Nur kommen irgendwie nicht ganz die richtigen Zeichen... Vielleicht könnt ihr mir da noch ein paar Tipps geben.
MfG
Nur kommen irgendwie nicht ganz die richtigen Zeichen... Vielleicht könnt ihr mir da noch ein paar Tipps geben.
MfG
Code: Alles auswählen
print(" ", end="")
for z in range(20):
print("{:2d}".format(z), end = ' ')
print("*"*66)
for i in range(0, 241, 20):
print("{:3d} * ".format(i), end = ' ')
for x in range(0, 20):
a = x + i
b = chr(a)
if a >= 32:
print("{:2s}".format(b), end = ' ')
print()
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@3.1415926: Was heisst „nicht ganz die richtigen Zeichen“? Was kommt dabei heraus, und an welcher Stelle unterscheidet sich das von dem was Du erwartest?
Edit: Und ich erwähne hier gerne noch einmal das ASCII nur bis 127 geht.
Edit: Und ich erwähne hier gerne noch einmal das ASCII nur bis 127 geht.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Ich kann grade leider kein Foto posten.
Dass ASCII nur bis 127 geht verirrt mich jetzt...
Die Angabe lautet:
Schreibe ein Programm, das eine ASCII Code Tabelle für die druckbaren Zeichen(ASCII-Codes von 32- 255).
Aber laut dem hier geht die Tabelle schon bis 255:
Das kommt bei mir raus:
MfG
Dass ASCII nur bis 127 geht verirrt mich jetzt...
Die Angabe lautet:
Schreibe ein Programm, das eine ASCII Code Tabelle für die druckbaren Zeichen(ASCII-Codes von 32- 255).
Aber laut dem hier geht die Tabelle schon bis 255:
Das kommt bei mir raus:
Code: Alles auswählen
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 *
20 * ! " # $ % & '
40 * ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;
60 * < = > ? @ A B C D E F G H I J K L M N O
80 * P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
100 * d e f g h i j k l m n o p q r s t u v w
120 * x y z { | } ~
140 *
160 * ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³
180 * ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 * È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 * Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï
240 * ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Ā ā Ă ă
Naja, da ist die Aufgabe ungenau/falsch. Wahrscheinlich ist ISO-8859 gemeint.
Das Leben ist wie ein Tennisball.
Was, wie bereits gesagt, daran liegt, dass ASCII-Zeichen nur bis 127 definiert sind. Mehr geht auch nicht, da ASCII ein 7-bit-Code ist. Alles andere sind hersteller- bzw. länderspezifische Erweiterungen. Dein Besipiel könnte Codepage 850 sein.
Zuletzt geändert von /me am Donnerstag 23. Januar 2020, 15:58, insgesamt 1-mal geändert.
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@3.1415926: Nein, das was Du da gepostet hast ist *keine* ASCII-Tabelle. ASCII hat nur Werte bis 127. Schreibe ich jetzt zum dritten mal. In der Tabelle ist auch nicht ISO-8859. Wo hast Du die Grafik denn her?
Hier ist ASCII beschrieben: https://de.wikipedia.org/wiki/American_ ... nterchange
Ich würde da einfach ab 128 das gleiche machen wie bei Codes innerhalb des 0...127 Bereichs die kein darstellbares Zeichen kodieren. Also weg lassen oder ein Leerzeichen oder einen Punkt ausgeben.
Hier ist ASCII beschrieben: https://de.wikipedia.org/wiki/American_ ... nterchange
Ich würde da einfach ab 128 das gleiche machen wie bei Codes innerhalb des 0...127 Bereichs die kein darstellbares Zeichen kodieren. Also weg lassen oder ein Leerzeichen oder einen Punkt ausgeben.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Ok, was muss ich also tun, damit ich eine Tabelle wie die von mir gepostete bekommen ? Selber komme ich leider nicht weiter. Ich will auch eher drauf hinaus, dass ich Zahlen problemlos mit Python in das geforderte Zeichen umwandeln kann (mit chr()) - also wenn ich chr(254) mache, bekomme ich was oben in der Tabelle bei 254 steht. Jedoch in meinem Programm funktioniert das leider nicht.
Gefunden habe ich die Tabelle einfach unter ASCII.
Tut mir leid, falls ich blöde Fragen stelle...
MfG
Gefunden habe ich die Tabelle einfach unter ASCII.
Tut mir leid, falls ich blöde Fragen stelle...
MfG
Dein Programm funktioniert absolut korrekt.
Der von dir verwendete Zeichensatz beinhaltet an der Position der Codetabelle das entsprechende Zeichen.
Wenn du als Ergebnis die Tabelle haben möchtest, die du oben gezeigt hast, musst herausfinden welche Codepage dort dargestellt wird, diese in deinem System einstellen und das Programm dann laufen lassen.
Das macht allerdings keinen Sinn.
Der von dir verwendete Zeichensatz beinhaltet an der Position der Codetabelle das entsprechende Zeichen.
Wenn du als Ergebnis die Tabelle haben möchtest, die du oben gezeigt hast, musst herausfinden welche Codepage dort dargestellt wird, diese in deinem System einstellen und das Programm dann laufen lassen.
Das macht allerdings keinen Sinn.
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@sparrow: Das ist keine Frage der eingestellten Codepage. `chr()` wandelt einen Unicode-Codepoint in ein Unicode-Zeichen um. Das ist eindeutig und unabhängig vom Betriebssystem und dessen Einstellungen.
Wenn man eine bestimmte Codepage darstellen möchte, müsste man ein Bytearray mit aufsteigenden Werten dekodieren, eventuell mit "replace" als `errors`-Argument und dann für die Anzeige auch noch mal extra auf das „replacement character“-Zeichen (�) prüfen und reagieren. Dann gibt es drei Fälle: darstellbares Zeichen, nicht darstellbares Zeichen, und in der Codepage nicht zugeordneter Bytewert. Ohne Farbe oder irgendeine andere Markierung wird es dann langsam nicht mehr so eindeutig das in einer Tabelle darzustellen.
@3.1415926: Noch mal: Die Tabelle ist falsch beschriftet, das ist *keine ASCII-Tabelle* in dem Bild. Vergiss das Bild! Das ist falsch. Das Bild ist nicht korrekt. Lies den Wikipediaartikel zu ASCII.
Wenn Du eine ASCII-Tabelle ausgeben sollst, dann gib nur die Zeichen für Werte bis 127 aus, denn nur die sind in ASCII definiert. Wobei 127 selbst zwar in ASCII definiert ist, aber wie die Zeichenwerte <32 kein darstellbares Zeichen kodiert. Also entweder auch explizit weg lassen, oder wie /me vorgeschlagen hat nicht darstellbare Zeichen durch ein Leerzeichen oder irgend etwas anderes darstellen. Ein Punkt ist auch nicht unüblich um nicht darstellbare Zeichencodes anzuzeigen. Und Du solltest da explizit etwas anzeigen weil das Terminal sonst komische Sachen macht, also entweder das irgendwie als Steuerzeichen interpretiert, oder *nichts* anzeigt, was in beiden Fällen das Layout der Tabelle stören kann.
Die Tabelle sieht auch für eine Codepage komisch aus IMHO. Mich würde da ja wirklich mal die Quelle interessieren.
Edit: Nachtrag, das sieht nach der DOS Codepage 850 aus: https://en.wikipedia.org/wiki/Code_page_850
Wenn man eine bestimmte Codepage darstellen möchte, müsste man ein Bytearray mit aufsteigenden Werten dekodieren, eventuell mit "replace" als `errors`-Argument und dann für die Anzeige auch noch mal extra auf das „replacement character“-Zeichen (�) prüfen und reagieren. Dann gibt es drei Fälle: darstellbares Zeichen, nicht darstellbares Zeichen, und in der Codepage nicht zugeordneter Bytewert. Ohne Farbe oder irgendeine andere Markierung wird es dann langsam nicht mehr so eindeutig das in einer Tabelle darzustellen.
@3.1415926: Noch mal: Die Tabelle ist falsch beschriftet, das ist *keine ASCII-Tabelle* in dem Bild. Vergiss das Bild! Das ist falsch. Das Bild ist nicht korrekt. Lies den Wikipediaartikel zu ASCII.
Wenn Du eine ASCII-Tabelle ausgeben sollst, dann gib nur die Zeichen für Werte bis 127 aus, denn nur die sind in ASCII definiert. Wobei 127 selbst zwar in ASCII definiert ist, aber wie die Zeichenwerte <32 kein darstellbares Zeichen kodiert. Also entweder auch explizit weg lassen, oder wie /me vorgeschlagen hat nicht darstellbare Zeichen durch ein Leerzeichen oder irgend etwas anderes darstellen. Ein Punkt ist auch nicht unüblich um nicht darstellbare Zeichencodes anzuzeigen. Und Du solltest da explizit etwas anzeigen weil das Terminal sonst komische Sachen macht, also entweder das irgendwie als Steuerzeichen interpretiert, oder *nichts* anzeigt, was in beiden Fällen das Layout der Tabelle stören kann.
Die Tabelle sieht auch für eine Codepage komisch aus IMHO. Mich würde da ja wirklich mal die Quelle interessieren.
Edit: Nachtrag, das sieht nach der DOS Codepage 850 aus: https://en.wikipedia.org/wiki/Code_page_850
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
@3.1415926: Deine Tabelle geht auch bis 259. Das ist also in 8bit auch nicht mehr abbildbar. Sollst Du die ersten 260 Zeichen des Unicode-Zeichensatzes abbilden?
i, x, a und b sind schlechte Variablennamen, weil sie nichts aussagen. Da erwarte ich sowas wie row, column und code_point. Die Zeile "20" ist falsch.
i, x, a und b sind schlechte Variablennamen, weil sie nichts aussagen. Da erwarte ich sowas wie row, column und code_point. Die Zeile "20" ist falsch.
Hallo,
Vielen Dank für eure HIlfe!
Ich musste doch erst heute abgeben
Scheinbar war die Angabe einfach fehlerhaft - ich hab mit einem anderen Lehrer darüber gesprochen, laut ihm stammt die Aufgabe aus C.
Und dass Python da irgendwie anders ist,.... ich habs mir leider nicht genau gemerkt.
Das mit den Variablennamen stimmt, in der Eile hab ich nicht mal an Kommentare gedacht...
Danke nochmal
MfG
Vielen Dank für eure HIlfe!
Ich musste doch erst heute abgeben
Scheinbar war die Angabe einfach fehlerhaft - ich hab mit einem anderen Lehrer darüber gesprochen, laut ihm stammt die Aufgabe aus C.
Und dass Python da irgendwie anders ist,.... ich habs mir leider nicht genau gemerkt.
Das mit den Variablennamen stimmt, in der Eile hab ich nicht mal an Kommentare gedacht...
Danke nochmal
MfG
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
ASCII ist ein Standard der unabhängig von Programmiersprachen ist. Auch in C hat ASCII nur 7 Bits pro Zeichen und Werte über 127 sind keine ASCII-Zeichen.
In C würde ein entsprechendes Programm beispielsweise so aussehen, welches für jedes darstellbare ASCII-Zeichen das Zeichen und jedes Zeichen ausserhalb von ASCII und/oder das nicht darstellbar ist, einen Punkt ausgibt:
Ausgabe:
Das kann man in Python sehr ähnlich lösen. Die `isprint()`-Funktion aus C ist in Python die hier im Thema bereits erwähnte `isprintable()`-Methode. Ein Äquivalent zu `isascii()` gibt es nicht, aber die Unicode-Codepoints 0 bis 127 entsprechen genau den ASCII-Werten: http://www.unicode.org/charts/PDF/U0000.pdf
Damit kann man sich also eine `is_ascii()`-Funktion sehr einfach selbst schreiben:
In C würde ein entsprechendes Programm beispielsweise so aussehen, welches für jedes darstellbare ASCII-Zeichen das Zeichen und jedes Zeichen ausserhalb von ASCII und/oder das nicht darstellbar ist, einen Punkt ausgibt:
Code: Alles auswählen
#include <ctype.h>
#include <stdio.h>
#define CHARACTERS_PER_ROW 20
int main(void)
{
int i, c;
printf(" ");
for (i = 0; i < CHARACTERS_PER_ROW; ++i) printf("%3d", i);
for (c = 0; c < 256; ++c) {
if (c % CHARACTERS_PER_ROW == 0) printf("\n%3d", c);
printf(" %c", (isascii(c) && isprint(c)) ? c : '.');
}
putchar('\n');
return 0;
}
Code: Alles auswählen
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 . . . . . . . . . . . . . . . . . . . .
20 . . . . . . . . . . . . ! " # $ % & '
40 ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E F G H I J K L M N O
80 P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m n o p q r s t u v w
120 x y z { | } ~ . . . . . . . . . . . . .
140 . . . . . . . . . . . . . . . . . . . .
160 . . . . . . . . . . . . . . . . . . . .
180 . . . . . . . . . . . . . . . . . . . .
200 . . . . . . . . . . . . . . . . . . . .
220 . . . . . . . . . . . . . . . . . . . .
240 . . . . . . . . . . . . . . . .
Damit kann man sich also eine `is_ascii()`-Funktion sehr einfach selbst schreiben:
Code: Alles auswählen
def is_ascii(character):
return 0 <= ord(character) <= 127
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.