input() vs sys.stdin.read()
import sys
s1 = input()
s2 = sys.stdin.read(1)
#type "s" for example
s1 == "s" #False
s2 == "s" #True
Warum? Wie kann ich input()
um richtig zu arbeiten?
Ich habe versucht zu codieren/decodieren s1
, aber es funktioniert nicht.
Danke.
- Ich vermute, Sie haben Sie s1 und s2 gemischt, bis in Ihre letzten 2 Zeilen?
- Versuchen Sie, um den code auszuführen.
- Funktioniert gut für mich. Sind Sie tatsächlich setzen Sie Anführungszeichen um die s? Und was os/python version benutzt du?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf Windows, werden Sie feststellen, dass das Ergebnis
input()
wenn Sie ein 's' und Geben Sie ist"s\r"
. Streifen alle Leerzeichen aus dem Ergebnis und Sie werden in Ordnung sein.Ihnen nicht sagen, welche version von Python, die Sie verwenden, so werde ich vermute, Sie wurden mit Python 3.2 läuft unter Microsoft Windows.
Dies ist ein bekannter bug, siehe http://bugs.python.org/issue11272 "input() hat trailing carriage return on windows"
Problemumgehungen gehören würde, mit einer anderen version von Python, mit einem Betriebssystem, das nicht windows, oder stripping trailing carriage returns off eine beliebige Zeichenfolge() kehrte von
input()
. Sie sollten sich auch bewusst sein, dass die Iteration über stdin hat das gleiche problem.Erstens, Eingang ist wie eval(raw_input()) was bedeutet, dass alles, was Sie an ihn übergeben werden evalualted als python-expresion. Ich schlage vor, Sie verwenden raw_input() statt.
Getestet habe ich den code und Sie sind gleich für mich:
Dies ist die Ausgabe:
Mithilfe von sys.stdin.Lesen(1) Lesen nur 1 Zeichen von stdin, was bedeutet, dass, wenn Sie passieren das "s" nur der erste " gelesen werden. Es gibt sys.stdin.readline() liest die ganze Zeile (einschließlich des abschließenden \n).
input()
ist die richtige Sache zu verwenden. Ihren Rat würde nur gelten, für die früheren Versionen von Python.