Python,如果 a 或 b 和 c 未按预期工作
Python, if a or b and c , not working as expected
我遇到了一个感觉很简单但我想不通的问题。
下面的示例 returns 'else' 符合预期:
a, b, c = False, False, True
if a or b and c:
print('if')
else:
print('else')
现在,如果我将相同的逻辑应用于我的项目,如下所示:
import time, vlc
def play_sound(path):
_ = vlc.MediaPlayer(path)
_.play()
def check_commands(audio_capture):
if 'who' or 'what' in audio_capture and "are you" in audio_capture:
play_sound("ResponseToCommands/response_A.mp3")
time.sleep(2.2)
elif audio_capture == "are you ready":
play_sound("ResponseToCommands/response_B.mp3")
check_commands('are you ready')
time.sleep(5) # optional
check_commands('what are you')
我希望得到相同的结果。但是,我一直收到 response_A.mp3 而不是先 response_B 然后 response_A.
如有任何建议,我们将不胜感激。
你的条件被解析为
if 'who' or ('what' in audio_capture and "are you" in audio_capture):
'who'
是真值,因此整个条件为真,无需检查 audio_capture
.
中的值
你想要的是
if ('who' in audio_capture or 'what' in audio_capture) and "are you" in audio_capture:
in
不会像乘法分布在加法上那样“分布”在 or
上。
在第一个例子中,简单地写 if a or b and c worked 因为这仅仅意味着如果 a 是 True 或者 b 是 True 并且 c 是 True。但是你不能对没有布尔值的例子使用相同的
因此,解决方案很简单
def check_commands(audio_capture):
if 'who' in audio_capture or 'what' in audio_capture and "are you" in audio_capture:
play_sound("ResponseToCommands/response_A.mp3")
time.sleep(2.2)
这应该很简单
我遇到了一个感觉很简单但我想不通的问题。
下面的示例 returns 'else' 符合预期:
a, b, c = False, False, True
if a or b and c:
print('if')
else:
print('else')
现在,如果我将相同的逻辑应用于我的项目,如下所示:
import time, vlc
def play_sound(path):
_ = vlc.MediaPlayer(path)
_.play()
def check_commands(audio_capture):
if 'who' or 'what' in audio_capture and "are you" in audio_capture:
play_sound("ResponseToCommands/response_A.mp3")
time.sleep(2.2)
elif audio_capture == "are you ready":
play_sound("ResponseToCommands/response_B.mp3")
check_commands('are you ready')
time.sleep(5) # optional
check_commands('what are you')
我希望得到相同的结果。但是,我一直收到 response_A.mp3 而不是先 response_B 然后 response_A.
如有任何建议,我们将不胜感激。
你的条件被解析为
if 'who' or ('what' in audio_capture and "are you" in audio_capture):
'who'
是真值,因此整个条件为真,无需检查 audio_capture
.
你想要的是
if ('who' in audio_capture or 'what' in audio_capture) and "are you" in audio_capture:
in
不会像乘法分布在加法上那样“分布”在 or
上。
在第一个例子中,简单地写 if a or b and c worked 因为这仅仅意味着如果 a 是 True 或者 b 是 True 并且 c 是 True。但是你不能对没有布尔值的例子使用相同的 因此,解决方案很简单
def check_commands(audio_capture):
if 'who' in audio_capture or 'what' in audio_capture and "are you" in audio_capture:
play_sound("ResponseToCommands/response_A.mp3")
time.sleep(2.2)
这应该很简单