Продолжаем учить язык программирования. Переходим к изучению 4 главы по книге: Майкл Доусон «Программируем на Python», 2014 (Michael Dawson «Python Programming for the Absolute Beginner», 3rd Edition), где мы изучим циклы с оператором for()
, введение констант в код, срезы и кортежи, работу с последовательностями на примере строк с операторами len()
, range()
, in
, jumble()
и т.д.
Конспект 4 главы с примерами написанных мной программ:
Содержание:
Циклы for
Мы уже знаем циклы с оператором while
, и даже сделали много задач. Помните, там вводится перед циклом управляющая переменная, которая затем используется в условии, которое в свою очередь проверяется на истинность каждый круг цикла. Так вот с циклом for
все немного иначе.
В цикле for
не используется условная конструкция для проверки — делать или не делать. Цикл for
исполняется циклично для всех элементов последовательности. Как только для каждого элемента последовательности цикла был повторен код, цикл завершается. Проще говоря, конструкция с for
— это цикл с предусловием или цикл с параметром. Суть работы этого цикла сводится к перебору значений в последовательности.
Что это за последовательность цикла for
, о чем вообще идет речь? Я тоже не сразу врубилась, в чем отличие этих циклов от тех, с которыми мы работали ранее. Дело в том, что for
по сути просто повторяет одно и то же действие (тело цикла) для заранее указанного списка элементов (последовательности), который явно указан в самом цикле. Общий вид цикла for
:
for элементы последовательности: сделай то-то (оператор)
Последовательность может быть любой — числовой или строкой текста. Переменные могут вводится как до цикла for
, так и внутри него. Во многих языках программирования есть циклы for, но в Python для этого цикла реализована большая свобода действий и нет необходимости использовать счетчик (инкремент / декремент).
Но если вы все-таки хотите использовать счетчик, то можно среди элементов последовательности ввести переменную-счетчик, которая в Python обычно обозначается одним из трех символов:
- i
- j
- k
Цикл for
позволяет организовать последовательный доступ к элементам последовательности.
Работу цикла for
проще всего увидеть на примере:
Программа «Слово по буквам»
word=input('Напечатай любое слово\n') for bukva in word: print(bukva)
В этой программе инициализация идет через переменную bukva
в последовательности строкового типа word
(то, что вводит пользователь). Пользователь вводит любой текст, а программа выводит этот текст по букве на каждой строке.
Функция range()
для цифровой последовательности
Общий вид функции range():
range(начало счета, конец счета [не включая его], интервал)
Интервал может быть как положительным значением, так и отрицательным. Если интервал -1
, то программа будет вести счет, уменьшая значение каждый раз на 1.
🐍 Идея!
Если нужно просто повторить какое-то действие заданное число раз, то можно не писать переменную в цикле for
, а просто использовать цикл с функцией range()
for _ in range(5): print('кот')
Работу функции range()
в цикле for
проще всего увидеть на примере:
Программа «Считалка»
Задача: Написать программу, которая 1) выводит все целые числа от 0 до 10 в строчку; 2) Перечисляет целые числа от 0 до 10, кратные 10; 3) Выводит все целые числа от 0 до 10 в обратном порядке.
print('Считалка 0-10') for num in range(11): print(num, end=' ') print('\nСчиталка 0-100, кратные 10') for num_1 in range(0,101,10): print(num_1, end=' ') print('\nСчиталка 10-0') for num_2 in range(10,-1,-1): print(num_2, end=' ')
Функция len()
Эта функция возвращает длину последовательности, которую ей задают в скобках.
text=input('Введите текст\n') print('Длина=',len(text))
Оператор in
Общий вид использования оператора in является условием, проверяющимся каждый раз на истинность и ложность:
переменная in последовательность
Программа «Анализатор текста»
Задача: написать программу, которая анализирует текст, введенный пользователем. В результате анализа программа выводит длину последовательности и сообщает, есть или нет в этой последовательности буква «а».
text=input('Введите текст\n') print('Длина последовательности:',len(text)) if 'а' in text: print('Буква "а" встречается в этом тексте') else: print('Буква "а" не встречается в этом тексте')
Индексация элементов последовательности
Цикл for
обычно просто перебирает все элементы последовательности подряд по очереди, если нам нужно достать какой-то конкретный элемент, то после имени переменной, задающей последовательность, ставим в квадратных скобках порядковый номер элемента (индекс — счет идет с нуля):
переменная[5]
Индексы бывают двух типов:
- с положительными номерами (счет начинается с
0
и идет вперед); - с отрицательными номерами (счет идет с
-1
, начинается с конца строки и идет влево).
Пример использования индексации показан в задаче:
Программа «Случайные буквы»
Задание: Напишите программу, которая просит пользователя ввести любое слово, а потом выводит случайные буквы этого слова столько раз, сколько букв в введенном слове.
import random word=input('Напиши слово\n') konec=(len(word)-1) nachalo=-len(word) for i in range(len(word)): index=random.randrange(nachalo,konec) print(word[index],'\n')
Программа «Только гласные»
Задача: Написать программу, которая дает пользователю ввести текст, а потом печатает только гласными буквами.
text=input('Введите текст, а я напечатаю его только согласными.\n') GLASNIE='аоуэюяыиеё' text_glasnie='' for i in text: if i.lower() in glasnie: text_glasnie+=i print(text_glasnie)
Введите текст, а я напечатаю его только согласными. Штукенция уеия >>>
Срезы строк
Этот способ работы с данными похож на индексирование элементов, но не по одному, а группами. Можно создать срез-копию даже всей исходной последовательности. Затем можно обращаться к срезам в коде программы.
Срезы создаются указанием индекса начала и конца последовательности в квадратных скобках аналогично как и в индексировании:
0 1 | 2 | 3 | 4 | 5 |
т | е | к | с | т |
-5 -4 | -3 | -2 | -1 |
Общий вид среза:
text[число1:число2]
Важно помнить, что число1
всегда должно быть больше номером, чем число2
, чтобы программа выдала правильное значение.
Можно сократить запись среза, опустив число1
, тогда началом среза будет считаться первый элемент. Запись будет такая:
text[:число2]
Можно опускать и конец, тогда по умолчанию концом среда будет конец последовательности. Запись аналогична предыдущей.
Если опустить все числа, то получится text[:]
и это означает срез-копию всей последовательности.
Программа «Нарежь текст»
Задача: Написать программу, которая будет нарезать введенный пользователем текст на части по его желанию — пользователь задает начальное и конечное значения для среза, который хочет увидеть.
text=input('Напиши текст, который надо нарезать\n') nachalo=int(input('Введите индекс начала среза\n')) konec=int(input('Введите индекс конца среза\n')) print(text[nachalo:konec])
Напиши текст, который надо нарезать Штукенция Введите индекс начала среза 1 Введите индекс конца среза 3 ту >>>
Кортежи
Кортеж в Python — это объединение любых типов данных в группу.
Общий вид кортежа: переменная=()
Внутри кортежа можно записать любые элементы через запятую. Перечислять элементы кортежа можно как подряд, так и с новой строки.
кортеж('кот', 'медведь')
Кортежи — это более гибкие конструкции, чем массивы, ведь в кортеже можно хранить одновременно и текст, и числа, и мультимедиа.
Программа «Что в моей сумочке»
Задача: Написать программу, которая выводит на экран содержимое сумочки, организованное через кортеж.
name=input('Hi, what is your name?\n') print('Welcome', name,'You have in your bag several items:\n') bag=('Food', 'Hat', 'Pillow') for i in bag: print(i) input('Press Entr to Exit')
Программа получилась такая:
Hi, what is your name? Kot Welcome Kot You have in your bag several items: Food Hat Pillow Press Entr to Exit >>>
Функция random.choice ()
Чтобы выбрать случайный элемент в последовательности, сначала подгружаем import random
, а затем используем функцию random.choice(переменная, задающая последовательность)
.
Игра «Анаграмма» (перестановка букв)
Задача: создать программу, которая будет случайным образом выбирать слово из строки, и затем случайным образом переставлять буквы в выбранном слове и показывать игроку. Пользователь должен будет угадать, что это за слово. Когда пользователь угадает, программа его поздравит.
print('Сейчас вы увидите случайную анаграмму, вам нужно угадать слово\n') input('Нажмите Entr, чтобы начать') slova=('медведь', 'канистра', 'грильяж', 'табуретка', 'программист') import random slovo_1=random.choice(slova) anagramma='' slovo_2=slovo_1 while slovo_2: dlina=len(slovo_2) bukva_index=random.randint(0,(dlina-1)) bukva=slovo_2[bukva_index] anagramma+=bukva if bukva_index!=0: slovo_nachalo=slovo_2[:bukva_index] else: slovo_nachalo='' slovo_konec=slovo_2[(bukva_index+1):] slovo_2=slovo_nachalo+slovo_konec print(anagramma) otvet=input('Напишите слово и нажмите Entr, чтобы проверить вашу версию\n') while otvet!=slovo_1: otvet=input('Напишите слово и нажмите Entr, чтобы проверить вашу версию') print('Поздравляю, вы угадали!') input('Нажмите Entr, чтобы выйти')
Фух! Написала программу анаграммы. Часа два писала, было много затыков. Старалась не ориентироваться на учебник, а делать так, как мне кажется. В итоге, все заработало:
Сейчас вы увидите случайную анаграмму, вам нужно угадать слово Нажмите Entr, чтобы начать аутектраб Напишите слово и нажмите Entr, чтобы проверить вашу версию табуретка Поздравляю, вы угадали! Нажмите Entr, чтобы выйти