如何简化if语句

4

如果要简化这个if语句,最好的方法是什么?

#!/usr/bin/python

ans=input("choose yes or no: ")

if ans == "yes" or ans == "YES" or ans == "y" or ans == "Y":
    print("ok")
else:
        print("no")

2
你想要 yEs 还是 yeS?如果是的话,也要检查 .lower() - Lafexlos
4个回答

9
您可以使用列表来查看它:
if ans in ['yes', 'YES', 'y', 'Y']:
    print('ok')
else:
    print('no')

4
我建议将其简化如下:
if ans.lower().startswith('y'):
    print('ok')
else:
    print('no')

如果在我们只关心第一个字符时将整个字符串小写化感觉浪费时间,您可以切片获取第一个字符(切片不会像普通索引一样出现IndexError错误):
if ans[:1].lower() == 'y':

1
也会将'yNo'识别为是的...但这可能不是个大问题... - pseudoDust
但它也会将“yse”识别为“yes”。我对这种权衡感到满意。 - TigerhawkT3
是的,这也是我的解决方案,只是想指出一下... - pseudoDust

2

制作一个你可以接受的答案set。这也将为您提供O(1)的查找时间,一旦您有大量可接受的答案可能会派上用场。

acceptable_answers = {'yes', 'YES', 'y', 'Y'}
if ans in acceptable_answers:
     #do stuff
else:
     #do other stuff

什么是 "set" 关键字? - Pol Hallen
@PolHallen 一个set是一个无序的、唯一元素的集合。 - timgeb
2
如果你想的话,可以使用字面量,例如 ...= {'yes', 'YES', 'y', 'Y'} - TigerhawkT3
@TigerhawkT3 我喜欢它 - timgeb

2

另一种方法:

accepted = answer.lower() in ['y','yes']
print ('ok' if accepted else 'no')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接