2011-05-19 7 views
7
import sys 
s1 = input() 
s2 = sys.stdin.read(1) 

#type "s" for example 

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

¿Por qué? ¿Cómo puedo hacer que input() funcione correctamente? He intentado codificar/decodificar s1, pero no funciona.entrada() vs sys.stdin.read()

Gracias.

+0

Supongo que tiene s1 y ¿s2 está mezclado en tus últimas 2 líneas? – Jacob

+0

Intenta ejecutar el código. – fogbit

+0

Funciona bien para mí. ¿Estás realmente poniendo citas alrededor de la s? ¿Y qué os/versión de python estás usando? – sdolan

Respuesta

7

Si está en Windows, notará que el resultado de input() cuando escribe una 's' y Enter es "s\r". Elimina todos los espacios en blanco del resultado y estarás bien.

+0

Gracias por la respuesta. – fogbit

6

No dijo qué versión de Python está utilizando, así que supongo que estaba utilizando Python 3.2 ejecutándose en Microsoft Windows.

trata de un error conocido ver http://bugs.python.org/issue11272 "input() ha de salida de retorno de carro en Windows"

Soluciones provisionales incluiría el uso de una versión diferente de Python, utilizando un sistema operativo que no es Windows, o extracción del carro de arrastre devuelve cualquier cadena() devuelta desde input(). También debe tener en cuenta que iterar sobre stdin tiene el mismo problema.

+0

Sí, es la versión 3.2 en Windows. Gracias por la explicación. Problema resuelto. – fogbit

+1

En la sugerencia de 'utilizar una versión diferente de Python', veo que se ha lanzado Python 3.2.1rc1, así que si no te importa usar un candidato de lanzamiento para una solución de punto menor, simplemente puedes actualizar a esa versión y el problema está arreglado. Ver http://www.python.org/download/releases/3.2.1/ – Duncan

0

En primer lugar, la entrada es como eval(raw_input()) lo que significa que todo lo que pase se evaluará como una expresión de python. Le sugiero que use raw_input() en su lugar.

He probado el código y ellos son iguales para mí:

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

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

Ésta es la salida:

[email protected]:/tmp$ python test.py 
"s" 
s 
They're both equal s 

Usando sys.stdin.read (1) leerá sólo 1 carácter de el stdin que significa que si pasa "s" solo el primero "se leerá. Hay sys.stdin.readline() que lee toda la línea (incluida la final \ n).

+1

Tenga en cuenta que al comentar mi respuesta @fogbit confirmó que están usando Python 3.2 donde 'input()' es lo correcto para usar. Su consejo solo se aplicaría a las versiones anteriores de Python. – Duncan

+0

Tienes razón. Cuando publiqué mi respuesta, no conocía la versión de Python. Debería haber preguntado. Gracias ^^ – FlaPer87

Cuestiones relacionadas