2010-01-08 39 views
1

我希望当我回应其他事情不同,是的,子进程不运行。Popen总是运行,忽略如果

r = raw_input('\nDo you want play the video?\n\nY:Yes N:No\n\n') 
if r == "Y" or "y" or "yes" or"yep" or"yeah": 
    message("Playing Video") 
    subprocess.Popen(playvid) 
else: 
    pass 

回答

1

改变这种

if r == "Y" or "y" or "yes" or"yep" or"yeah": 

if r in ["Y","y","yes","yep","yeah"] : 

或更改你的回应小写

r = raw_input('\nDo you want play the video?\n\nY:Yes N:No\n\n').lower() 
if r in ["y","yes","yep","yeah"] : 
+0

更清洁的方式可能Alquimista也可以像 r.lower()在[” Y“,”Y“,”是“,”是“,”是“]: :-) – shahjapan 2010-01-08 07:31:53

+0

@shahjapan:如果您使用lower(),那么为什么在列表中包含'”Y“? – nosklo 2010-01-08 10:20:58

1

我不知道如果我完全理解你的问题,但我相信这个问题是你的语法s线:

if r == "Y" or "y" or "yes" or"yep" or"yeah": 

你正在测试“Y”,“Y”等真相,所有评估为“真”。把所有的值的序列,并且做到:

if r in seq: 

这应该是做的比

if r == "Y" or r == "y"... 
+0

小修正:'=='绑定比'或'更紧密,因此OP正在测试'(r ==“Y”)或“y”或“yes”等的真实性。 – balpha 2010-01-08 06:44:33