[Tutor] if >= 0
Peter Otten
__peter__ at web.de
Mon Feb 10 16:59:47 CET 2014
rahmad akbar wrote:
> hey again guys, i am trying to understand these statements,
>
> if i do it like this, it will only print the 'print locus' part
>
> for element in in_file:
> if element.find('LOCUS'):
> locus += element
> elif element.find('ACCESSION'):
> accession += element
> elif element.find('ORGANISM'):
> organism += element
>
> print locus
> print accession
> print organism
>
>
> once i add >= 0 to each if conditions like so, the entire loop works and
> prints the 3 items
>
> for element in in_file:
> if element.find('LOCUS') >= 0:
> locus += element
> elif element.find('ACCESSION') >= 0:
> accession += element
> elif element.find('ORGANISM') >= 0:
> organism += element
>
> print locus
> print accession
> print organism
>
> why without '>= 0' the loop doesnt works?
element.find(some_string) returns the position of some_string in element, or
-1 if some_string doesn't occur in element. All integers but 0 are true in a
boolean context, i. e.
if -1: print -1 # printed
if 0: print 0 # NOT printed
if 123456789: print 123456789 # printed
So unlike what you might expect
if element.find(some_string): # WRONG!
print "found"
else:
print "not found"
will print "not found" if element starts with some_string and "found" for
everything else.
As you are not interested in the actual position of the potential substring
you should rewrite your code to
if "LOCUS" in element:
locus += element
elif "ACCESSION" in element:
accession += element
elif "ORGANISM" in element:
organism += element
which unlike the str.find() method works as expected.
More information about the Tutor
mailing list