Reputation: 4214
straightrunfaces = 'A23456789TJQKA';
for i in range(0,10):
if ((counts[straightrunfaces[i]] and
counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]])) or
((counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]] and
counts[straightrunfaces[i+4]])):
C:\datasci_course_materials\assignment3>python poker.py
File "poker.py", line 62
counts[straightrunfaces[i+3]])) or
^
**SyntaxError: invalid syntax**
I don't understand why the 'OR' operator is not working
Upvotes: 1
Views: 1098
Reputation: 99620
Try:
straightrunfaces = 'A23456789TJQKA';
for i in range(0,10):
if all(counts[straightrunfaces[i]], counts[straightrunfaces[i+1]], counts[straightrunfaces[i+2]], counts[straightrunfaces[i+3]]) or all(counts[straightrunfaces[i+1]], counts[straightrunfaces[i+2]], counts[straightrunfaces[i+3]], counts[straightrunfaces[i+4]]):
Upvotes: 0
Reputation: 27772
The problem isn't the or
, it's the newline at the end. There are no open parentheses anymore, so the newline terminates the if
statement; however, an if
statement must end in a colon, and yours doesn't, to the parser.
Either add an explicit line continuation:
if (counts[straightrunfaces[i]] and
counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]]) or \
(counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]] and
counts[straightrunfaces[i+4]]):
Or wrap the whole thing in parentheses:
if ((counts[straightrunfaces[i]] and
counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]]) or
(counts[straightrunfaces[i+1]] and
counts[straightrunfaces[i+2]] and
counts[straightrunfaces[i+3]] and
counts[straightrunfaces[i+4]])):
PEP 8 recommends the latter.
Upvotes: 7