由于python中的"OR"操作,语法无效

vka*_*l11 0 python

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**
Run Code Online (Sandbox Code Playgroud)

我不明白为什么"OR"运算符不起作用

Cai*_*von 6

问题不在于or,它是最后的换行符.没有打开的括号,所以换行符终止了if语句; 但是,一个if语句必须以冒号结束,而你的语句必须以解析器结束.

添加显式的行继续:

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]]):
Run Code Online (Sandbox Code Playgroud)

或者用括号括起整个东西:

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]])):
Run Code Online (Sandbox Code Playgroud)

PEP 8推荐后者.