2017-11-17 18 views
1

最初の128文字のASCII文字のうち、どの文字が印字可能で認識可能な文字かを示す短いスクリプト(チュートリアル用)を作成しようとしています。など、「部分的に動作しますが、ラインフィードのように、まだ物事のオフにトリガされstring.printableにASCIIテーブルを印刷するために非表示のASCII文字を無効にする

は、私が罠に追加し、これらを置き換えることができる1つのまたは2つのラインがありますされ、 `使用

次のスクリプトテーブルを素敵に見せて、印刷可能な文字を表示できるように、空白文字を制御しますか? noobの-読みやすくするために手書きアウト書かれ

import string 
lines = [] 
for i in range(8): 
    line = [] 
    for j in range(16): 
     k = i + j *16 
     thing = chr(k) 
     if thing not in string.printable: 
      thing = ' ' 
     line.append(thing) 
    lines.append(line) 

for line in lines: 
    print "".join(line) 

はIDLE:

enter image description here

コピー/ 4つのスペースを含むSEに貼り付ける:

[email protected]`p 
    !1AQaq 
    "2BRbr 
    #3CScs 
    $4DTdt 
    %5EUeu 
    &6FVfv 
    '7GWgw 
    (8HXhx 
     )9IYiy 

*:JZjz 
+;K[k{ 
,<L\l| 

- = M] M} > N^N〜 /OPさんのコメントどおりに印刷できない文字を置き換えるために

+1

あなたの出力と処理を扱うことができる場合は、[ユニコード](http://www.unicode.org/charts/nameslist/)、[コントロールピクチャ](HTTP: //www.unicode.org/charts/nameslist/c_2400.html)ブロックは置換文字として便利です。 –

+0

@TomBlodget [特に不思議な所有権のあるアポストロフィー](https://apple.stackexchange.com/q/204296/143729)と闘った後、私はユニコドフォビア*の軽度の症例を開発しました。無制限、コントロール画像のブロックは非常に面白く見え、私はそれを念頭に置いています。情報をありがとう! – uhoh

答えて

1

更新されたコードO_O。?。

from string import printable, whitespace 

replace_ch = ' ' # The character to replace non-printable characters with 
whitespace_ch = ' ' # The character to replace whitespace characters with 

# For console output 
out_width = 8 
out_height = 16 

chars = [chr(i) for i in range(128)] 
# Replace whitespace characters 
chars = [whitespace_ch if c in whitespace else c for c in chars] 
# Replace non-printable characters 
chars = [c if c in printable else replace_ch for c in chars] 
# Form lines for printing 
lines = [[chars[i + j * out_height] for j in range(out_width)] for i in range(out_height)] 

for line in lines: 
    print(''.join(line)) 

出力:

[email protected]`p 
    !1AQaq 
    "2BRbr 
    #3CScs 
    $4DTdt 
    %5EUeu 
    &6FVfv 
    '7GWgw 
    (8HXhx 
)9IYiy 
    *:JZjz 
    +;K[k{ 
    ,<L\l| 
    -=M]m} 
    .>N^n~ 
    /?O_o 

代替は、それらが制御文字として定義されているように単にASCIIの最初の32個の文字を回避することです。文字のord(c)cを確認する方が効率的かもしれません。

+1

ええ、私は置換文字を 'に設定しました。それらが表示されるためには、それは少しファンキーです。ここでもう一度考えてみよう。 – Shayn

+0

アスキー表の9から13までの文字列からのファンクフィーは、空白文字で置き換えられる。あなたが言及したコメントについては、私はそれを見ることができない、それが削除されている可能性があります。 – Shayn

+1

私はそれを追加しました!私はちょうどあなたがしなければならなかったように私の行を設定するつもりです – Shayn

1
import string 

columns = [] 
height = 10 
whitespace_map = { 
    '\t': 'TAB', 
    '\n': 'LF', 
    '\r': 'CR', 
    '\x0b': 'VT', 
    '\x0c': 'FF', 
} 

i = 0 
j = height 
while i < len(string.printable): 
    column = string.printable[i:j] 
    columns.append(column) 
    i += height 
    j += height 

k = 0 
while k < height: 
    for column in columns: 
     if k > len(column): 
      break 
     c = column[k] 
     if c in string.whitespace and c != ' ': 
      c = whitespace_map[c] 
      # Alternative: c = ' ' 
     print('{: <5}'.format(c), end='') 
    print() 
    k += 1 

プリント:

0 a k u E O Y ) = { 
1 b l v F P Z * > | 
2 c m w G Q ! + ? } 
3 d n x H R " , @ ~ 
4 e o y I S # - [ 
5 f p z J T $ . \ TAB 
6 g q A K U % / ] LF 
7 h r B L V & : ^ CR 
8 i s C M W ' ; _ VT 
9 j t D N X ( < ` FF 
+1

非常に魅力的なテーブル! – uhoh

+1

これはより有益な答えです。両方を受け入れることができれば幸いです。 'string.whitespace'を考えてくれてありがとう! – uhoh

+0

[このコメント](https://stackoverflow.com/questions/47341255/#comment81653449_47341255)は面白いです! – uhoh

関連する問題