Проверьте, есть ли место в строке - PullRequest
25 голосов
/ 21 июля 2010
' ' in word == True

Я пишу программу, которая проверяет, является ли строка одним словом.Почему это не работает, и есть ли лучший способ проверить, не содержит ли строка пробелы или является одним словом ...

Ответы [ 7 ]

63 голосов
/ 21 июля 2010

== имеет приоритет над in, поэтому вы на самом деле тестируете word == True.

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

Но тебе вообще не нужно == True. if требует [что-то, что оценивается как True или False], а ' ' in word будет равно true или false. Итак, if ' ' in word: ... просто отлично:

>>> ' ' in w
3: True
15 голосов
/ 21 июля 2010

Запись if " " in word: вместо if " " in word == True:.

Пояснение:

  • Например, в Python a < b < c эквивалентно (a < b) and (b < c).
  • То же самое верно для любой цепочки операторов сравнения, которые включают in!
  • Поэтому ' ' in w == True эквивалентно (' ' in w) and (w == True), что не , что вы хотите.
9 голосов
/ 21 июля 2010

Есть много способов сделать это:

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

Чтобы убедиться, что оно соответствует любому виду пространства, вы можете использовать re module:

import re
if re.search(r"\s", your_string):
  print "several words"
1 голос
/ 22 июля 2010

Вы можете попробовать это, и если он найдет пробел, он вернет позицию, где находится первый пробел.

if mystring.find(' ') != -1:
    print True
else:
    print False
0 голосов
/ 21 июля 2010

Используйте это:

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
0 голосов
/ 21 июля 2010

Вы можете сказать word.strip(" "), чтобы удалить любые начальные / конечные пробелы из строки - вы должны сделать это до вашего if оператора Таким образом, если кто-то введет данные, такие как " test ", ваша программа все равно будет работать.

Тем не менее, if " " in word: определит, содержит ли строка пробелы. Если это не помогает, можете ли вы предоставить дополнительную информацию?

0 голосов
/ 21 июля 2010
word = ' '
while True:
    if ' ' in word:
        word = raw_input("Please enter a single word: ")
    else:
        print "Thanks"
        break

Это более идиоматический питон - сравнивать с True или False не нужно - просто используйте значение, возвращаемое выражением ' ' in word.

Кроме того, вам не нужно использовать pastebin для такого небольшого фрагмента кода - просто скопируйте код в свое сообщение и используйте маленькие кнопки 1 и 0, чтобы код выглядел как код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...