На прошлом занятии

  • условия
  • bool
  • логические операторы

План этого занятия

  • индексы
  • циклы

Строки: индексы

Однажды ты спросишь меня, что для меня на первом месте: ты или программирование?

Я отвечу тебе, что программирование.

И ты уйдёшь, так и не узнав, что ты для меня на нулевом месте.

Оператор []

С помощью квадратных скобок вы можете выбрать любой символ из строки:

>>> hello = 'hello'
>>> print(hello[0])
h
>>> print(hello[1])
e
>>> print(hello[2])
l
>>> print(hello[3])
l
>>> print(hello[4])
o

Обратите внимание, что любой элемент строки — это тоже маленькая строка, состоящая из одного символа

>>> hello = 'hello'
>>> h = hello[0]
>>> print(type(h))
<class 'str'>

>>> if hello[0] == h:
...     print('The first symbol of', hello, 'is', h)
...
'The first symbol of', 'hello', 'is', 'h'
>>> if hello[0] == hello[0][0][0][0][0][0]:
...     print('Что тут произошло?')
...

Циклы

for

Для выполнения ряда однотипных действий используют циклы. Самый простой — это цикл for:

>>> for letter in 'hello':
...     print(letter)

Обратите внимание на отступы, они должны быть в блоке for, как и в блоке if.

range()

С помощью range() можно перебрать целые числа в цикле for:

>>> for number in range(5):  # числа от нуля до 5 не включительно
...     print(number)
...     print('Последняя строка итерации цикла for')
...
0
Последняя строка итерации цикла for
1
Последняя строка итерации цикла for
2
Последняя строка итерации цикла for
3
Последняя строка итерации цикла for
4
Последняя строка итерации цикла for

Если подставить в цикл range(x, y), то будут выданы числа от x до y-1:

>>> for number in range(4, 8):
...     print(number)
4
5
6
7

Можно указать шаг перебора в качестве третьего аргумента, например range(0, 6, 2) выдаст числа «0», «2», «4». То есть range(x, y, step) выдаёт все целые числа начиная с x с шагом step, но не включая y.

Точно так же можно выдавать числа от большего к меньшему:

>>> for number in range(5, -1, -1):
...     print(number)
5
4
3
2
1
0

len()

С помощью функции len(s) можно найти длину строки. Таким образом можно перебрать все индексы строки:

>>> hello = 'hello'
>>> print(len(hello))
5
>>>
>>> for i in range(len(hello)):  # i - общепринятое обозначение для индекса
...     print(i)
...     print(hello[i])
...
0
h
1
e
2
l
3
l
4
o

Более красивый способ получить одновременно и индекс и значение — это enumerate()

while

Цикл while позволяет выполнять однотипные действия, пока выполняется условие:

>>> i = 9
>>> while i >= 5:
...     print(i)
...     i -= 1  # это то же самое, что i = i-1
...
9
8
7
6
5
>>> print('Finally, i =', i)
Finnaly, i = 4

Прерывание итерации цикла

Выполнение цикла можно остановить по команде break:

>>> for i in range(3, 30, 3):  # от 3 до 30 с шагом 3
...     print(i)
...     if i > 11:
...         print('i превысило 11')
...         break
...
3
6
9
12
i превысило 11

Или можно досрочно перейти к следующей итерации:

>>> for i in range(3, 30, 3):
...     print(i)
...     if i == 12:
...         print('Сейчас i равно 12')
...         continue
...     else:
...         print('А теперь i =', i)
...
3
А теперь i = 3
6
А теперь i = 6
9
А теперь i = 9
12
Сейчас i равно 12
15
А теперь i = 15
18
А теперь i = 18
21
А теперь i = 21
24
А теперь i = 24
27
А теперь i = 27

Те же команды можно применять и в цикле while, например можно сделать «бесконечный» цикл:

>>> while True:  # выполняется всегда
...     answer = input('Сколько будет 5 x 6? ')
...     if answer == 36:
...         print('И это правильный ответ!')
...         break  # выходим из цикла
...     else:
...         print('Попробуем ещё раз')
...
Сколько будет 5 x 6? 

Если ваша программа «зависла», то нажмите ctrl+c в оболочке, после чего программа остановится с ошибкой KeyboardInterrupt.

IDLE after ctrl+c

На чём можно потренироваться?

Шифр Цезаря

Сделать шифровальную программу, которая берёт слово и шифрует каждую букву следующей по алфавиту. Для этого нужно сделать два набора букв и оперировать их индексами.

Домашнее задание

Вам нужно написать программу, которая производит одно из перечисленных ниже действий, в зависимости от номера варианта. Во всех случаях, где требуется вывести буквы, они выводятся по-одной на строку.

  1. Спрашивает у пользователя число n, а затем n раз спрашивает пользователя слово. Если вместо слова введена пустая строка '', то выводится сообщение «Вы ввели пустую строку».

  2. Спрашивает у пользователя слово (в кириллице). Если вторая буква слова — это «к», «и» или «л», то выводит все чётные буквы этого слова, иначе выводит все нечётные буквы.

  3. Спрашивает у пользователя слово (в кириллице). Если первая буква слова — это «а», «э», «е» или «я», то выводит слово побуквенно в прямом порядке, иначе выводит буквы этого слова задом наперёд.

  4. Спрашивает у пользователя число и выводит на экран все натуральные чётные числа, которые являются степенью двойки (1, 2, 4, 8, …) и не превышают введённого числа.

  5. Спрашивает у пользователя число и выводит на экран таблицу умножения на это число (т. е., например, если введено число 5, то выводятся строчки вида 1 * 5 = 5; 2 * 5 = 10, и так далее — всего десять строчек).

  6. Спрашивает у пользователя слово (в кириллице). Если длина слова меньше 6, то выводит буквы этого слова, иначе выводит все его буквы до середины (не включая среднюю букву, если число букв нечётно).

  7. Спрашивает у пользователя слово (в кириллице). Выводит сначала все чётные буквы этого слова, а затем все нечётные буквы. В обоих случаях пропускает буквы «п», «и» и «о».

Выполните задание пройдя по ссылке в GitHub Classroom:


Улучшить эту страницу