Практическое занятие №44 (1И)
Тема: Реализация циклических алгоритмов в Python.
Цель работы: формирование теоретических и практических навыков работы на языке программирования Python
Оборудование: компьютер с установленной операционной системой Windows, подключение к сети Интернет
Время работы 2 часа
Теоретические сведения
В языке программирования Python циклы существенно проще и яснее для понимания, нежели в ряде других. Некоторые языки предоставляют 3-5 конструкций циклов, иные – и вовсе не имеют таких структур (ряд чисто функциональных языков программирования). В Питоне имеется только два типа циклов: while и for.
1. Конструкция цикла while
while :
else:
break»
2. Конструкция цикла for
for :
else:
break»
Цикл for позволяет перебирать элементы по индексу или напрямую.
Оба вида циклических структур могут включать условные выражения и специальные «прерыватели»: continue, break.
Для успешного решения заданий необходимо понимать устройство циклов в Python, уметь использовать вложенные циклы, стремиться минимизировать количество итераций (при такой возможности).
Ход работы
Задача 1
На вход функция more_than_five(lst) получает список из целых чисел. Результатом работы функции должен стать новый список, в котором содержатся только те числа, которые больше 5 по модулю.
def more_than_five(lst):
new_lst = []
for number in lst:
if abs(number) 5:
new_lst.append(number)
return new_lst
# Тесты
print(more_than_five([-11, 4, -2, 90, 400, 0, -5]))
print(more_than_five([-2, 2, 3, 4, 0, -1]))
print(more_than_five([70, -900, 41, 0]))
Задача 2. Базовый уровень
Условие
Евгению предоставили строку, состоящую из русских букв разных регистров, и попросили очистить ее от заглавных литер.
Как ему показалось, он написал верный код, но результат совсем не порадовал.
Ниже представлен пример работы «чистильщика строк», которому срочно требуется ваша помощь.
letters = 'ЫгВЫоЯСремДШНККАыкЩЙФа'
clean_string = ''
for letter in letters:
if not letter.isupper():
clean_string += letter
letters = clean_string
print(letters)
Задача 3. Базовый уровень
Анна решила представить некую таблицу с заглавными и строчными буквами русского алфавита в красивом формате.
Об этом ее попросили англоязычные друзья из социальных сетей.
Недолго думая девушка создала скрипт, который выполнял подобную операцию.
Результат работы программы продемонстрирован ниже.
Сможете повторить (в строках с галочками - их 27 штук, чтобы вам не пришлось долго считать)? Для идентичности результатов примените любой моноширинный шрифт (в котором все символы имеют одинаковую ширину).
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| А а || К к || Х х |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Б б || Л л || Ц ц |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| В в || М м || Ч ч |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Г г || Н н || Ш ш |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Д д || О о || Щ щ |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Е е || П п || Ъ ъ |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Ё ё || Р р || Ы ы |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Ж ж || С с || Ь ь |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| З з || Т т || Э э |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| И и || У у || Ю ю |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Й й || Ф ф || Я я |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
rus_lower = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
for position in range(11):
print('^' * 27)
for letter in rus_lower:
if rus_lower.index(letter) % 11 == position:
print('| ', letter.upper(), letter, ' |', end='')
print()
print('^' * 27)
Задача 4. Базовый уровень
Условие
Для идентификации своего круга проверенных лиц будущий тайный агент (ведь все о чем-то мечтают) Максим решил пускать на свою страничку в Интернете только тех, чьи никнеймы есть в его секретном списке.
Он уверен в своих людях (особенно в том, что они по глупости не расскажут никому своё секретное прозвище), как и в том, что имена товарищей невозможно подобрать случайно. К слову, вот этот список: Мавпродош, Лорнектиф, Древерол, Фиригарпиг, Клодобродыч.
По мере увеличения круга знакомых Максим, естественно, дополнит данный список.
Ваша задача такова: повторите код, который будет спрашивать у пользователя его ник и
либо пускать на сайт (выведется сообщение «Ты – свой. Приветствую, любезный {НИК_ПОСЕТИТЕЛЯ}!»),
либо нет (в этом случае будет такой текст: «Тут ничего нет. Еще есть вопросы?».
Фактически, будущий супергерой решил поиздеваться над теми, кого нет в его удивительном перечне, так как им будет показываться это сообщение постоянно.
Очень коварный замысел!).
Для проверки прозвищ посетителей используйте встроенную функцию input().
nick = input()
secret_list = ['Мавпродош', 'Лорнектиф', 'Древерол', 'Фиригарпиг', 'Клодобродыч']
while nick not in secret_list:
print('Тут ничего нет. Еще есть вопросы?')
nick = input()
else:
print(f'Ты – свой. Приветствую, любезный {nick}!')
Задача 5. *Продвинутый уровень
Условие
Валентина прогуляла лекцию по математике.
Преподаватель решил подшутить над нерадивой студенткой и
попросил ее на практическом занятии перечислить все положительные делители некоторых целых чисел.
Для несложных примеров студентка быстро нашла решения (для числа 6 это: 1, 2, 3, 6; а для числа 16 это: 1, 2, 4, 8, 16), но этим все не закончилось.
На домашнее задание ей дали варианты посложнее: 23436, 190187200, 380457890232.
Решить такое вручную, как вы понимаете, практически нереально.
Вот Валентина и обратилась к вам за помощью.
Помогите ей (при помощи функции all_divisors(number)).
Постарайтесь найти самое оптимальное решение.
Результат представьте в виде списка (не забудьте отсортировать по возрастанию).
def all_divisors(number):
lst = [1, number]
for i in range(2, 1 + int(number ** 0.5)):
if number % i == 0:
lst.extend({number // i, i})
return sorted(lst)
# Тесты
print(all_divisors(23_436))
print(all_divisors(190_187_200))
print(all_divisors(380_457_890_232))
Контрольные вопросы:
В чем отличие циклов for и while?
Какова вычислительная сложность цикла for, перебирающего элементы множества (сколько нужно совершить операций)?