2010-07-21 14 views
18
' ' in word == True 

Estoy escribiendo un programa que comprueba si la cadena es una sola palabra. ¿Por qué no funciona esto y hay alguna forma mejor para comprobar si una cadena no tiene espacios/es una sola palabra ..Compruebe si el espacio está en una cadena

+0

¿Qué quiere decir que no funciona? ¿Recibes un error de sintaxis? ¿No obtienes ningún error? – SilentGhost

+0

Además, está bien pegar código en su comentario, solo asegúrese de formatearlo. –

+2

* Nunca * use 'expression == True' para probar la verdad. Solo usa 'expression'! –

Respuesta

44

== tiene prioridad sobre in, por lo que en realidad está probando word == True.

>>> w = 'ab c' 
>>> ' ' in w == True 
1: False 
>>> (' ' in w) == True 
2: True 

Pero no necesita == True en absoluto. if requiere [algo que se evalúa como verdadero o falso] y ' ' in word se evaluará como verdadero o falso. Entonces, if ' ' in word: ... está bien.

+2

No coincidirá con todo tipo de espacios: \ n, \ r, '', ... Si necesita unirlos, es mejor usar el módulo re, con el método de coincidencia en \ s. Hará un mejor tokenizador. –

+2

Programación de objetos favoritos: '... == True' o' ...! = False', o cualquier variante de los mismos. – Stephen

+2

La explicación de Jukka Suomela es un poco más correcta que la mía, por cierto. Según mi explicación, estarías probando 'word == True' luego' '' en True', lo cual no tiene sentido. –

0
word = ' ' 
while True: 
    if ' ' in word: 
     word = raw_input("Please enter a single word: ") 
    else: 
     print "Thanks" 
     break 

Esta es pitón más idiomática - la comparación con Verdadero o Falso, no es necesario - sólo use el valor devuelto por la expresión ' ' in word.

Además, no necesita usar pastebin para un fragmento de código tan pequeño: simplemente copie el código en su publicación y use los pequeños botones 1s y 0s para que su código se vea como código.

0

Puede decir word.strip(" ") para eliminar cualquier espacio inicial/final de la cadena; debe hacerlo antes de su declaración if. De esa forma, si alguien ingresa una entrada como " test ", su programa seguirá funcionando.

Dicho esto, if " " in word: determinará si una cadena contiene espacios. Si eso no funciona, ¿puede proporcionar más información?

14

Escribe if " " in word: en lugar de if " " in word == True:.

Explicación:

  • En Python, por ejemplo a < b < c es equivalente a (a < b) and (b < c).
  • Lo mismo vale para cualquier cadena de operadores de comparación, que incluyen in!
  • Por lo tanto, ' ' in w == True es equivalente a (' ' in w) and (w == True) que es que no es lo que desea.
+1

Wow. Sabía que '<' y '==' funcionaban de la manera que describiste, pero no me di cuenta de que 'in' sí, también. Había asumido que combinarlos se vería como 'a in (b == c)' o '(a en b) == c'. Para ver que realmente se interpreta como dice Jukka, puedes probar "a" en "abc" == "abc". Es "Verdadero", pero sería "Falso" si se interpretara de cualquiera de las otras formas que sugerí. – ArtOfWarfare

7

Hay muchas maneras de hacerlo:

t = s.split(" ") 
if len(t) > 1: 
    print "several tokens" 

para asegurarse de que coincide con cada tipo de espacio, se puede utilizar el módulo re:

import re 
if re.search(r"\s", your_string): 
    print "several words" 
0

Utilice esta:

word = raw_input("Please enter a single word : ") 
while True: 
    if " " in word: 
     word = raw_input("Please enter a single word : ") 
    else: 
     print "Thanks" 
     break 
1

Puede intentarlo, y si encuentra espacio devolverá la posición donde está el primer espacio

if mystring.find(' ') != -1: 
    print True 
else: 
    print False 
+0

'mystring.find ('')! = -1' ** es ** booleano. – SilentGhost

+0

Es decir, esto se puede acortar a 'print mystring.find ('')! = -1' –

Cuestiones relacionadas