Глава 5. Циклы
В питоне есть два вида циклов: for
и while
. О них и поговорим.
Цикл while
Цикл while
— это всем известный классический while
из JavaScript, C++, Java:
x = 100while x > 0:handle(x)x -= 1
Вариация вечного цикла:
while True:rotate_spinner()
Этот цикл тоже является вечным, потому что 1 интерпретируется как «истина»:
while 1:run()
Цикл for
Цикл for
последовательно перебирает элементы коллекции:
for resp in responses:parse(resp)
Пример прохода в цикле for
по последовательности чисел от 0 до 9, которую генерирует функция range()
:
for x in range(10):print(x)
Имплементируйте тело функции. Пусть она возвращает количество слов, из которых состоит строка s
в snake_case. snake_case — стиль написания составных слов, при котором слова разделяются символом подчеркивания _
.
Например, если на вход функции прилетает строка s
, равная "not_supported_format"
, функция вернет 3. А для "naive_solution"
вернет 2.
Не забудьте обработать случай, когда строка s
пустая. Количество слов, из которых состоит слово в snake_case, равно количеству символов _
+ 1.
def get_words_count(s):
if s == "":
return 0
count = 0
for c in s:
if c == "_":
count += 1
return count + 1
Операторы continue и break
В питоне есть оператор continue
для перехода на следующую итерацию цикла.
В этом цикле выведутся все согласные буквы:
s = "Now is better than never."for letter in s:if letter in "aeiouy":continueprint(letter)
Также в питоне есть оператор break
для выхода из цикла. Этот цикл завершится на первом встреченном пробеле:
s = "Although never is often better than right now."for letter in s:if letter == " ":breakprint(letter)
Ключевое слово else в связке с циклами
Забавная особенность питона: ключевое слово else
может использоваться не только в связке с if
, но и после циклов while
и for
! В таком случае else
сработает, только если выход из цикла произошел без участия break
.
s = "go"for letter in s:if letter == "y":breakprint(letter)else:print("There is no letter 'y' in string")
g
o
There is no letter 'y' in string
В данном примере из цикла for
нет выхода по break
. Поэтому срабатывает ветка else
.
Имплементируйте функцию print_letters()
. На вход она принимает строку. Функция анализирует каждую букву строки:
- Если в строке содержится заглавная буква, то печатает эту букву. Для определения, что буква заглавная, используйте метод строки
isupper()
. Например, при переборе букв строки, гдеc
— буква, вызов метода выглядит так:c.isupper()
. - Если найден пробел, то все следующие за ним символы пропускаются.
- Если в строке не было ни одного пробела (в том числе если строка пустая), функция печатает
"no spaces"
.
Для выхода из цикла используйте break
, для перехода на новую итерацию — continue
, а для обработки условия не выхода по break
— ветку else
.
def print_letters(s):
for с in s:
if с.isupper():
print(с)
if с == ' ':
break
else:
print("no spaces")
Резюмируем
- В питоне есть два вида циклов:
for
иwhile
. - Циклы поддерживают операторы
break
,continue
иelse
. - Ветка
else
цикла срабатывает, если из цикла не было выхода поbreak
.