Цикл for выполняется только один раз, поэтому цикл не использовался - PullRequest
0 голосов
/ 29 декабря 2018

Итак, во-первых, я новичок в 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.Просто, не правда ли?Но когда я что-то набираю, код возвращает true только в том случае, если используется hi, но когда я печатаю, скажем привет, он возвращает false.Я добавил функцию печати, чтобы увидеть, работает ли цикл, но он печатает только Привет, поэтому я пришел к выводу, что с циклом for что-то не так.Действительно ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Я предполагаю, что вы ожидаете, что приветствие будет самым первым словом.В этом случае вы можете сделать это в 1 строку:

isGreet = True if mes.split(maxsplit=1)[0] in greets else False
0 голосов
/ 29 декабря 2018

цикл 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] как-то расточительно, потому что продолжает разбивать другие слова, которые мы не делаемt нужно, поэтому замените на mes.split(maxsplit=1)[0] или mes.split(None,1)[0] для python 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...