python - for循环只循环一次,所以就像没有使用循环一样
问题描述
所以首先我是python的新手,我遇到了一个简单的问题,但仍然很复杂。基本上,我尝试循环列表中的所有内容,并让它们通过条件检查是否存在。
这是为了检查句子是否是问候语。
greets = ["Hi","Hello", "Hey"]
#Thinking
def isGreet(mes): #Checks if it's a greeting
words = mes.split()
for greet in greets:
print(greet)
if (words[0]==greet):
return 1;
else:
return 0;
当用户输入内容时,代码应该检查它是否是问候语,如果是,则返回 true,如果不是,则返回 false。很简单,不是吗?但是当我输入一些东西时,代码只有在使用 hi 时才返回 true,但是当我输入 let's say hello 时,它会返回 false。我添加了一个打印函数来查看循环是否有效,但它只打印 Hi,所以我得出结论,for 循环一定有问题。非常感谢任何帮助。
解决方案
for循环只循环一次,所以就像没有使用循环一样
是的,因为无论第一次迭代如何,您都会从函数中返回。因此,如果测试的第一个单词仅是列表中的第一个,则您的测试有效。否则返回 0。
不需要循环,使用in
greets = {"Hi","Hello", "Hey"} # set should be faster, only if a lot of words, though
def isGreet(mes):
return mes.split()[0] in greets
如评论中所述,mes.split()[0]
有点浪费,因为它不断拆分我们不需要的其他单词,因此用mes.split(maxsplit=1)[0]
或替换mes.split(None,1)[0]
为 python 2。
推荐阅读
- nsstring - 如何将 keyedArchiver 转换为字符串并再次返回
- firebase - 发生异常。_CastError(类型 '_InternalLinkedHashMap
' 不是类型转换中类型 'String' 的子类型) - css - 在向右或向左使用淡入时消除移动设备上的空白
- makefile - 为什么 Mingw64 中的 `make` 会启动一个新的 shell?
- javascript - GraphQL 订阅返回空对象不创建订阅
- parsing - Mojo::DOM - 如何从 dom 对象中解析数据集?
- python - 如何在没有掩码的情况下检索数字(或特定位)的第一位?
- mongodb - 是否有任何有效的方法可以以最新的一阶对给定的 mongodb 数据进行分页并避免排序超过大数据的内存限制?
- asp.net-core - asp.net core 中的多租户
- asp.net-core - aws lambda api gatewayc AmazonDynamoDBException