Python for循环只循环一次,因此它';好像没有使用循环

Python for循环只循环一次,因此它';好像没有使用循环,python,python-3.x,for-loop,conditional-statements,Python,Python 3.x,For Loop,Conditional Statements,所以,首先我是python新手,我遇到了一个简单但仍然复杂的问题。基本上,我尝试循环列表中的所有内容,并让它们通过一个条件检查是否存在这些内容 这是为了检查一个句子是否是问候语 greets = ["Hi","Hello", "Hey"] #Thinking def isGreet(mes): #Checks if it's a greeting words = mes.split() for greet in greets: print(greet)

所以,首先我是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。我添加了一个print函数来查看循环是否有效,但它只打印Hi,所以我得出结论,for循环肯定有问题。非常感谢您的帮助

for循环只循环一次,所以就像没有使用循环一样

是的,因为无论在第一次迭代中发生什么,您都将从函数返回。因此,如果测试的第一个单词只是列表中的第一个单词,那么测试就有效了。否则返回0

无需循环,在

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(maxslit=1)[0]
mes.split(None,1)[0]
替换为python 2。我假设您希望问候语是第一个单词。在这种情况下,您可以在一行中完成:

isGreet = True if mes.split(maxsplit=1)[0] in greets else False

如果在第一次迭代后返回,为什么要循环?只需在问候语中返回单词[0]请注意正确的缩进。在python中非常重要;)还要避免使用分号。python中无用的
greets
应该是一个集合而不是列表。我还建议您使用
mes.split(maxslit=1)[0]
以避免不必要的拆分。或者
str.partition
。我想保持答案版本的不可知性,尽管这里不需要三元:
isGreet=mes.split(maxslit=1)[0]表示问候。谢谢