Próbuję przeanalizować następujący ciąg z Pythonem: {x0}}. Muszę go przeczytać, aby sprawdzić, czy zawiera ciąg no delay. Użyłem następującego, aby przeanalizować: contents_of_tunnel.find("no delay").

To działa dobrze. Ale kiedy używam go w if/else, tak jak poniżej:

>>> if contents_of_tunnel.find("no delay") == True:
...   print 1
... else:
...   print 0
... 
0

Wychodzi do zera. Dlaczego to? Wierzę, że kwestia jest z pierwszą linią, która idzie taka: >>> if contents_of_tunnel...

Dzięki za pomoc.

0
tjons 25 listopad 2013, 22:29

3 odpowiedzi

Najlepsza odpowiedź
find(...)
  S.find(sub [,start [,end]]) -> int

  Return the lowest index in S where substring sub is found,
  such that sub is contained within S[start:end].  Optional
  arguments start and end are interpreted as in slice notation.

  Return -1 on failure.

Jedynym sposobem, w jaki będzie to wydrukować 1, jeśli contents_of_tunnel zaczyna się od "bez opóźnienia", ponieważ zwrócona indeks będzie 0. -1 ocenia True.

Powinieneś użyć:

if contents_of_tunnel.find("no delay") != -1:

Lub

if "no delay" in contents_of_tunnel:

Lub

try:
    index = contents_of_tunnel.index("no delay")
    # substring found
except ValueError:
    # substring not found        
4
John Spong 25 listopad 2013, 18:33

Może chcesz czegoś takiego:

if 'no delay' in contents_of_tunnel: print 1
else: print 0

Lub tylko

print 1 if 'no delay' in contents_of_tunnel else 0
6
Hyperboreus 25 listopad 2013, 18:31

Powodem jest to, że contents_of_tunnel.find("no delay") zwraca numer. Dlatego, zamiast używać == True, użyj != -1. W ten sposób zrobi to, czego się spodziewałeś.

0
AHuman 25 listopad 2013, 18:36