我正在尝试制作一个程序,如果用户输入特定短语,该程序就会循环播放。当前,无论用户输入什么,程序都会结束循环。
umlist = ['um', 'UM' , 'Um' ]
while True:
phrase = input('Say something. ')
umcheck=phrase.split()
if umcheck in umlist:
print("You said um, try again")
else:
break
print("Well done, you didn't say um.")
如果用户输入“ um”,我需要更改什么以使程序检测并循环
答案 0 :(得分:3)
您可以使用更简单的解决方案来实现:
将输入内容设为小写,然后在其中检查'um':
while True:
phrase = input('Say something. ')
umcheck=phrase.lower().split()
if 'um' in umcheck:
print("You said um, try again")
else:
break
print("Well done, you didn't say um.")
答案 1 :(得分:2)
in
在另一个list
中查找list
的出现。它不会像您认为的那样执行相交测试。
仅说明一下,使条件匹配的唯一方法是将一个列表放在列表中,如下所示:
umlist = ['um', 'UM' , 'Um', ["my","sentence"] ]
umcheck = ["my","sentence"]
>>> umcheck in umlist
True
可以使用any
和其他(Test if lists share any items in python)来实现。我的方法是使用set
。创建您不想看到的一组单词,并查看用户输入的一组单词是否相交:
umlist = {'um', 'UM' , 'Um' }
while True:
phrase = input('Say something. ')
umcheck=set(phrase.split())
if not umcheck.isdisjoint(umlist):
print("You said um, try again")
else:
break
print("Well done, you didn't say um.")
如果两个集合没有共同的元素,则 umcheck.isdisjoint(umlist)
返回True
。取而代之以进行测试(或使if
分支反向以更清楚)
答案 2 :(得分:1)
首先,SOME_VARIABLE - [<some_value>]
是一个列表!一言不发。
exp:
SOME_VARIABLE - []
然后:
umcheck
在phrase = "this is an um test"
中找不到任何列表。
您可以这样做:
umcheck => ['this', 'is', 'an', 'um', 'test']