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

Sto scrivendo un programma che controlla se la stringa è una singola parola. Perché non fa questo lavoro e c'è un modo migliore per controllare se una stringa non ha spazi/è una sola parola ..Verifica se lo spazio è in una stringa

+0

Cosa vuoi dire che non funziona? Ricevi l'errore di sintassi? Non hai nessun errore? – SilentGhost

+0

Inoltre, è corretto incollare il codice nel tuo commento, ma assicurati di formattarlo. –

+2

* Mai * usare 'espressione == True' per verificare la verità. Basta usare 'espressione'! –

risposta

44

== ha la precedenza su in, quindi in realtà stai testando word == True.

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

Ma non è necessario il == True. if richiede [qualcosa che vale per Vero o Falso] e ' ' in word verrà valutato su true o false. Quindi, if ' ' in word: ... va bene.

+2

Non corrisponderà a tutti i tipi di spazi: \ n, \ r, '', ... Se ha bisogno di abbinarli, è meglio usare il modulo re, con il metodo di corrispondenza su \ s. Farà un tokenizer migliore. –

+2

Programmazione pet peeve: '... == True' or' ...! = False', o qualsiasi sua variante. – Stephen

+2

La spiegazione di Jukka Suomela è un po 'più corretta della mia, a proposito. Secondo la mia spiegazione, testare 'word == True' quindi' '' in True', il che non ha senso. –

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

Questo è più idiomatica pitone - Confronto contro Vero o falso non è necessaria - solo utilizzare il valore restituito dall'espressione ' ' in word.

Inoltre, non è necessario utilizzare pastebin per un piccolo snippet di codice: è sufficiente copiare il codice nel post e utilizzare il pulsante 1s e 0s per rendere il codice simile al codice.

0

È possibile dire word.strip(" ") per rimuovere qualsiasi spazio iniziale/finale dalla stringa: è necessario farlo prima dell'istruzione if. In questo modo se qualcuno immette input come " test " il tuo programma funzionerà ancora.

Detto questo, if " " in word: determinerà se una stringa contiene spazi. Se ciò non funziona, puoi fornire maggiori informazioni?

14

Scrivere if " " in word: anziché if " " in word == True:.

Spiegazione:

  • In Python, per esempio a < b < c equivale a (a < b) and (b < c).
  • Lo stesso vale per qualsiasi catena di operatori di confronto, che includono in!
  • Pertanto ' ' in w == True equivale a (' ' in w) and (w == True) che è non quello che vuoi.
+1

Wow. Sapevo che '<' e '==' funzionavano nel modo in cui descrivevi, ma non mi rendevo conto che anche 'in' lo era. Avevo pensato che la loro combinazione sarebbe stata vista come 'a in (b == c)' o '(a in b) == c'. Per vedere che è davvero interpretato come dice Jukka, puoi provare '' a 'in' abc '==' abc''. È 'True', ma sarebbe' False' se fosse interpretato in uno degli altri modi che ho suggerito. – ArtOfWarfare

7

Ci sono un sacco di modi per farlo:

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

per essere sicuri che corrisponda ogni tipo di spazio, è possibile utilizzare modulo re:

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

Utilizzare questo:

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

Si può provare questo, e se troverà qualsiasi spazio restituirà la posizione dove si trova il primo spazio.

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

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

+0

I.e., questo può essere abbreviato in 'print mystring.find ('')! = -1' –

Problemi correlati