13

1つの質問に2つのString.printableミステリーがあります。

まず、Python 2.6では:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

文字列の終わりを見ると、「\ x0b\x0c」が親指のように突き出ているのがわかります。なぜ彼らはそこにいるのですか?オーストラリアの設定に設定されたマシンを使用しているので、アクセントのある文字などは使用しないでください。

次に、次のコードを実行してみてください。

for x in string.printable: print x,
print
for x in string.printable: print x

最初の行は、スペースで区切られたすべての文字を正常に印刷します。2つの奇妙な文字は、男性と女性のシンボルになります。

2行目は、改行で区切られた最後を除くすべての文字を正常に印刷します。男性のシンボルが印刷されます。女性の記号は、欠落している文字(ボックス)に置き換えられます。

Pythonは性別による偏見を意図したものではなかったと思いますが、違いは何でしょうか。

4

2 に答える 2

27

「画面に表示できる」と「印刷可能」には違いがあります。端末には、低ASCIIプリンター制御コード0x0Bおよび0x0Cがオスおよびメスの記号として表示されます。これは、フォント内のこれらのインデックスに含まれているためです。これらの文字は、垂直タブ文字およびフォームフィード文字としてより正確に記述されます。これらの2文字は、\ t \rおよび\nとともにすべて印刷可能であり、プリンターで明確に定義された処理を実行します。

于 2009-01-06T21:15:36.713 に答える
6

cmd.exe 内から:

>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>

Emacs の内部:

>>> print '\f\v'
^L^K

これは、 formats(5)の man ページからの抜粋です。

| | シーケンス | キャラクター | 端末アクション |
|---------+--------------+----------------------- ----------------------|
| | \f | フォームフィード | 印刷位置を初期位置に移動 |
| | | | | | 次の論理ページの印刷位置。| |
| | \v | 垂直タブ | 印刷位置を | の先頭に移動します。
| | | | | | 次の垂直タブ位置。ある場合 |
| | | | | | | に残された垂直タブ位置はもうありません。
| | | | | | ページ、動作は未定義です。| |
于 2009-01-06T22:27:59.097 に答える