Python: циклы for, константы, срезы, кортежи, последовательности len, range, in, choice


Продолжаем учить язык программирования. Переходим к изучению 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, чтобы выйти

 


Запись опубликована в рубрике Python. Добавьте в закладки постоянную ссылку.

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.