2

私は Python が初めてで、最近受講しているクラスで、ドラゴン レルムのチュートリアルを開始しました。http://inventwithpython.com/chapter6.html私は、この小さなプロジェクトを独力でやり遂げ、半長編の冒険物語を作ることにしました。途中で、テキストを Word に貼り付け始めました。(フラッシュで作成した以前の冒険物語を使用していたので、すべてのテストはすでに書き上げられていました)。Word への貼り付けを開始したのは、' を ' に、" を \" にすばやく置き換えることができるようにするためでした。実行してみると、おかしなことに気がつきました。Flash から直接コピーしたテキストでは、' または " を正しく表示するためにバックスラッシュが必要でしたが、Word からコピーしたテキストでは必要ありませんでした。実行すると、Word からコピーしたテキストにバックスラッシュが表示されました。

例えば:

「これは初心者ですか?」ブロンドは尋ねました。
「うん、リリー」とレイチェルは元気よく答えた。

これは、実行中に表示されるものです。バックスラッシュを削除して実行すると、次のように出力されます。

「これが初心者?」ブロンドは尋ねた。
「うん、リリー」とレイチェルは元気よく答えた。

しかし、Flash からコピーしたテキストは、バックスラッシュを使用しても正常に機能し、バックスラッシュを削除すると何らかのエラーが発生します。

Word からテキストをコピーするとバックスラッシュが不要になる理由を教えてください。私が Python 3.2.2 で作業していたのではないかと疑問に思われた方のために、私は 2.7 でテストしていません。

4

2 に答える 2

7

Word はひどいコード エディターです。

引用符は、ASCII アルファベットの通常の二重引用符ではなく、Unicode 標準の別の場所の引用符である「派手な」引用符に置き換えられました。

>>> u'”'
u'\u201d'

私の Unicode アプリケーションは、それが RIGHT DOUBLE QUOTATION MARK 記号であると教えてくれます。Word は通常、対応する LEFT DOUBLE QUOTATION MARK 記号も使用します。

Python 文字列で二重引用符を使用する場合は、文字列全体を単一引用符で囲むだけです。

'I am a string with a double (") quote'

または、トリプルクォートを使用できます。

"""I am a string with both singe (') *and* double (") quotes"""

そうすれば、これらすべてのエスケープを気にする必要はありません。

于 2012-11-01T16:35:40.370 に答える
0

これは、 を\エスケープし"、python が文字列に閉じ引用符を見つけられなかったため、EOLエラーが発生したためです。

In [19]: "This the newbie\ "  #add a space after `\` and it works
Out[19]: 'This the newbie\\ '

In [20]: "This the newbie\" 
------------------------------------------------------------
   File "<ipython console>", line 1
     "This the newbie\"
                       ^
SyntaxError: EOL while scanning string literal


In [22]: "\"This the newbie\"" 
Out[22]: '"This the newbie"'
于 2012-11-01T16:35:01.980 に答える