Как операторы return функции работают внутри для циклов? Посмотрите мой код ниже, что заставило меня задуматься об этом.
Это похоже на игру в скрэббл. Вам дают n букв (мы будем называть это рукой), и цель состоит в том, чтобы сделать слово из вашей руки. Рука находится в форме словаря, вот так:
yellow = {'y':1, 'e':1, 'l':2, 'o':1, 'w':1}
Я написал функцию с именем get_frequency_dict
для преобразования строки в эту форму.
Я хочу написать функцию, которая сообщает мне, является ли данное слово правильным или нет. У меня есть список допустимых слов в переменной word_list
Вызов функции: is_valid_word(word, hand, word_list)
, которая принимает три входа.
word: string
hand: dictionary (string: int)
word_list: list of lowercase strings
Итак, я хотел написать эту функцию, которая возвращает True, если слово допустимо, и False, если слово недопустимо:
def is_valid_word(word, hand, word_list):
word_dict = get_frequency_dict(word.lower())
if word.lower() in word_list:
for char in word_dict:
if (char in hand) and (hand[char] >= word_dict[char]):
return True
else:
return False
else:
return False
Эта функция отлично работает с различными различные входные данные, но я не совсем уверен, что понимаю логи c за функцией, возвращаемой в for l oop?
Как мы l oop через ключи в словаре (буквы) , мы получим True или False в зависимости от того, выполнено условие или нет. Итак, как функция знает, что вернуть? Что если один символ возвращает False, а следующий символ возвращает True? Мгновенно ли он возвращает False, как только он видит один False в for для l oop?
Код, представленный ниже, имеет для меня больший смысл:
total_false = 0
for char in word_dict:
if (char in hand) and (hand[char] >= word_dict[char]):
pass
else:
total_false += 1
if word.lower() not in word_list:
return False
elif total_false > 0:
return False
else:
return True
Имеет ли первый сегмент кода сделать этот "подсчет" за кадром? Как, если мы увидим Ложь, она вернет Ложь?