#!/usr/bin/env python # coding: utf-8 # # Основы программирования в Python # # *Алла Тамбовцева, НИУ ВШЭ* # # ## Семинар 2 # ### Задача 0 (разминка) # # Даны два списка `a` и `b` (см. ниже). # # 1. Выведите на экран первый элемент списка `a`, третий элемент списка `a`, последний элемент списка `a`. # 2. Добавьте в список `b` элемент 7 (просто допишите в конец). # 3. Замените пятый элемент списка `a` на число 8. # 4. Создайте список `merged`, который включает в себя все элементы списка `a` и списка `b`. # 5. Создайте новый список `с`, который получается заменой последнего элемента списка `a` на число 100. Сам список `a` измениться не должен! # In[1]: a = [1, 0, 9, 12, 18, 34, 89, 91, 33, 127] b = [2, 8, 9, 11, 76, 25, 44] # In[2]: # 1 print(a[0]) print(a[2]) print(a[-1]) # In[3]: # 2 b.append(7) b # In[4]: # 3 a[4] = 8 a # In[5]: # 4 merged = a + b merged # In[6]: # 5 c = a.copy() c[-1] = 100 print(a) print(c) # ### Задача 1 (девочковая) # # Есть список имен: # In[7]: girls = ["Иветта", "Виолетта", "Кассандра", "Вирджиния", "Амелия", "Розамунда", "Янина", "Беатриса"] # Используя список `girls`, выведите на экран следующие списки: # # ["Виолетта", "Кассандра", "Вирджиния", "Амелия"] # ["Вирджиния", "Амелия", "Розамунда", "Янина", "Беатриса"] # ["Иветта", "Виолетта", "Вирджиния", "Амелия"] # ["Кассандра", "Амелия", "Розамунда"] # In[8]: print(girls[1:5]) # 1 print(girls[3:]) # 2 print(girls[0:2] + girls[3:5]) # 3 print(girls[2:3] + girls[4:6]) # 4 # ### Задача 2 (поэлементная) # # Дан список L. Выведите на экран (последовательно, с новой строчки): # # * все элементы списка L # * логарифмированные значения элементов списка L # In[9]: L = [12, 3, 8, 125, 10, 98, 54, 199] # In[10]: # 1 for i in L: print(i) # In[11]: # 2 from math import log for j in L: print(log(j)) # Замените пятый элемент списка L на 0. Проделайте те же операции, что и раньше. Объясните, почему получаются такие результаты. # In[12]: L[4] = 0 for i in L: print(i) # In[13]: for j in L: print(log(j)) # `ValueError`: нельзя брать натуральный логарифм от неположительного числа. # ### Задача 3 (демографическая) # # В списке `age` сохранены значения возраста респондентов: # # age = [24, 35, 42, 27, 45, 48, 33] # # Создайте список age2, в котором будут храниться значения возраста, возведенные в квадрат. # # **Подсказка:** используйте цикл *for*. # In[14]: age = [24, 35, 42, 27, 45, 48, 33] age2 = [] for a in age: res = a ** 2 age2.append(res) age2 # Преобразования можно было делать сразу внутри `append()`, не создавая промежуточную переменную *res*. # In[15]: age2 = [] for a in age: age2.append(a ** 2) age2 # ### Задача 4 (игровая) # # Питон просит пользователя загадать (ввести с клавиатуры) целое число $k$ от 1 до 10. Питон берет это число $k$ и выводит на экран $k$-тый элемент списка `numbers`, причем $k$-ый элемент в привычном понимании, в нумерации, которая начинается с единицы. # # Список `numbers`: # In[16]: numbers = [1, 5, 6, 8, 10, 21, 25, 1, 0, -9, 9] # **Пояснение:** # # *Входные данные:* # # Введите целое число от 1 до 10: 3 # # *Выходные данные:* # # 6 # In[17]: numbers = [1, 5, 6, 8, 10, 21, 25, 1, 0, -9, 9] # In[19]: k = int(input("Введите целое число от 1 до 10: ")) print(numbers[k - 1]) # ### Задача 5 (мыслительная) # # Объясните, что делает следующий код и почему он выдает такие результаты: # In[20]: l = [1,2,3,4] for i in range(len(l)): a = l[i] + l[i-1] print(a) # Разберем код на части. Что такое `range(len(l))`? # In[21]: list(range(len(l))) # индексы элементов списка l # Значит цикл *for* бегает по индексам списка l. Тогда `l[i]` ‒ это i-тый элемент списка `l`, а `l[i-1]` ‒ элемент, предшествующий i-тому элементу. Эти два элемента складываются, и результат сохраняется в `a`. # # Посмотрим. Если i = 0, то получаем `l[0]` и `l[-1]`. Значит, на первом шаге (на первой итерации) цикла мы складываем первый и последний элементы списка. # # `1 + 4 = 5` # # Двигаемся дальше. Если i = 1, то получаем `l[1]` и `l[0]`. Значит, на втором шаге цикла мы складываем второй и первый элементы списка. # # `2 + 1 = 3` # # И так далее. # # Почему этот код интересен? Потому, что он не ломается: Python не возражает против отрицательных индексов элементов, он просто начинает считать элементы с конца списка.