6
import sys
s1 = input()
s2 = sys.stdin.read(1)

#type "s" for example

s1 == "s" #False
s2 == "s" #True

なんで?どうすればinput()正しく動作させることができますか?エンコード/デコードしようとしましs1たが、機能しません。

ありがとうございました。

4

3 に答える 3

7

input()Windowsを使用している場合は、「s」を入力してEnterキーを押したときの結果が。であることに気付くでしょう"s\r"。結果から末尾の空白をすべて削除すれば、問題はありません。

于 2011-05-19T08:20:09.790 に答える
6

使用しているPythonのバージョンがわからなかったので、MicrosoftWindowsで実行されているPython3.2を使用していたと思います。

これは既知のバグです。http://bugs.python.org/issue11272を参照してください。

回避策には、異なるバージョンのPythonの使用、Windows以外のオペレーティングシステムの使用、またはから返されたstring()からの末尾のキャリッジリターンの削除が含まれますinput()。stdinを反復処理する場合にも同じ問題があることに注意する必要があります。

于 2011-05-19T08:18:42.303 に答える
0

まず、入力はeval(raw_input())のようなものです。これは、入力に渡すすべてのものがPython式として評価されることを意味します。代わりにraw_input()を使用することをお勧めします。

私はあなたのコードをテストしました、そしてそれらは私にとって等しいです:

import sys
s1 = input()
s2 = sys.stdin.read(1)

if s1==s2 and s1=="s":
    print "They're both equal s"

これは出力です:

flaper87@BigMac:/tmp$ python test.py 
"s"
s
They're both equal s

sys.stdin.read(1)を使用すると、stdinから1文字だけが読み取られます。つまり、「s」を渡すと、最初の「」だけが読み取られます。sys.stdin.readline()は、行全体(最終\n)。

于 2011-05-19T08:34:58.653 に答える