#!/usr/bin/env python # coding: utf-8 # # Python для сбора и анализа данных # # *Алла Тамбовцева, НИУ ВШЭ* # ## Семинар 2: списки и строки # # ### Задание 0 # # Даны два списка `a` и `b`: # In[1]: a = [1, 0, 9, 12, 18, 34, 89, 91, 33, 127] b = [2, 8, 9, 11, 76, 25, 44] # 1. Выведите на экран первый элемент списка `a`, третий элемент списка `a`, последний элемент списка `a`. # 2. Добавьте в список `b` элемент 7 (просто допишите в конец). # 3. Замените пятый элемент списка `a` на число 8. # 4. Создайте список `merged`, который включает в себя все элементы списка `a` и списка `b`. # 5. Создайте новый список `c`, который получается заменой последнего элемента списка `a` на число 100. Сам список `a` измениться не должен! # In[2]: # 1 print(a[0], a[2], a[-1]) # In[3]: # 2 b.append(7) print(b) # In[4]: # 3 a[4] = 8 print(a) # In[5]: # 4 вариант 1 merged = a + b print(merged) # In[6]: # 4 вариант 2 merged = a.copy() merged.extend(b) print(merged) # In[7]: # 5 c = a.copy() # c = a[:] c[-1] = 100 print(c) # ### Задание 1 # # Есть список имён: # In[8]: girls = ["Иветта", "Виолетта", "Кассандра", "Вирджиния", "Амелия", "Розамунда", "Янина", "Беатриса"] # Используя список `girls`, выведите на экран следующие списки: # # ["Виолетта", "Кассандра", "Вирджиния", "Амелия"] # ["Вирджиния", "Амелия", "Розамунда", "Янина", "Беатриса"] # ["Иветта", "Виолетта", "Вирджиния", "Амелия"] # ["Кассандра", "Амелия", "Розамунда"] # In[9]: print(girls[1:5]) print(girls[3:]) print(girls[0:2] + girls[3:5]) print(girls[2:3] + girls[4:6]) # In[10]: # менее красивый вариант для последнего print([girls[2]] + girls[4:6]) # In[11]: # объединенный вариант, # символ \n – для перехода на новую строку print(girls[1:5], "\n", girls[3:], "\n", girls[0:2] + girls[3:5], "\n", girls[2:3] + girls[4:6], "\n", sep = "") # ### Задание 2 # # Дан список `L`. # In[12]: L = [12, 3, 8, 125, 10, 98, 54, 199] # Выведите на экран (последовательно, с новой строчки): # # * все элементы списка `L`; # * логарифмированные значения элементов списка `L`. # # Замените пятый элемент списка `L` на 0. Проделайте те же операции, что и раньше. Объясните, почему получаются такие результаты. # In[13]: from math import log for i in L: print(i, log(i)) # In[14]: # ломается – выход их цикла L[4] = 0 for i in L: print(i, log(i)) # ### Задание 3 # # Объясните, что делает следующий код и почему он выдает такие результаты: # In[15]: M = [1, 2, 3, 4] for i in range(len(M)): a = M[i] + M[i-1] print(a) # Разберем код на части. Что такое `range(len(M))`? # In[16]: list(range(len(M))) # индексы элементов списка M # Значит, цикл `for` бегает по индексам списка `M`. Тогда `M[i]` – это i-тый элемент списка `M`, а `M[i-1]` – элемент, предшествующий i-тому элементу. Эти два элемента складываются, и результат сохраняется в `a`. # # Посмотрим. Если `i = 0`, то получаем `M[0]` и `M[-1]`. Значит, на первом шаге (на первой итерации) цикла мы складываем первый и последний элементы списка. # # 1 + 4 = 5 # # Двигаемся дальше. Если `i = 1`, то получаем `M[1]` и `M[0]`. Значит, на втором шаге цикла мы складываем второй и первый элементы списка. # # 2 + 1 = 3 # # И так далее. # # Почему этот код интересен? Потому, что он не ломается: Python не возражает против отрицательных индексов элементов, он просто начинает считать элементы с конца списка. # In[17]: # альтернатива коду без range() for i in M: a = i + M[M.index(i) - 1] print(a) # ### Задание 4 # # Дан список `L`: # # L = [4, 8, 9, 0, 10, 12, 56, 6, 7] # # Напишите программу, которая запрашивает у пользователя с клавиатуры индекс элемента в списке `L`, новое значение этого элемента, а потом заменяет старое значение новым. Список `L` должен измениться. # # **Пример:** пользователь ввел числа 3 и 100, и список `L` стал таким: # # L = [4, 8, 9, 100, 10, 12, 56, 6, 7] # In[18]: L = [4, 8, 9, 0, 10, 12, 56, 6, 7] # In[19]: ind = int(input("Enter index: ")) k = float(input("Enter value: ")) L[ind] = k print(L) # ### Задание 5 # # Напишите программу, которая запрашивает у пользователя с клавиатуры два числа и возвращает список целых чисел, которые находятся в промежутке между этими числами (исключая указанные числа). # # **Пример:** пользователь ввел число 5 и число 9, ему вернулся список `[6, 7, 8]`. # In[2]: inp = input("Enter two integers: ") s1, s2 = inp.split() n1 = int(s1) n2 = int(s2) nums = list(range(n1 + 1, n2)) print(nums) # ### Задание 6 # # Напишите программу, которая запрашивает у пользователя с клавиатуры целое число $n$ и выводит на экран сумму квадратов целых чисел от 0 до $n$. В процессе решения списки создавать нельзя! # In[20]: n = int(input()) sum_sq = 0 # range(n + 1) for j in range(0, n + 1): sum_sq = sum_sq + j ** 2 print(sum_sq) # ### Задание 7 # # Напишите программу, которая запрашивает у пользователя его фамилию, имя, отчество, введенные в одну строчку через пробел, и выводит на экран сообщения: # # Ваша фамилия: фамилия # Ваше имя: имя # Ваше отчество: отчество # # **Пример:** # # *Входные данные:* # # Введите Ваши ФИО: Тамбовцева Алла Андреевна # # *Выходные данные:* # # Ваша фамилия: Тамбовцева # Ваше имя: Алла # Ваше отчество: Андреевна # In[3]: fio = input("Введите Ваши ФИО: ") f, i, o = fio.split() print("Ваша фамилия:", f) print("Ваше имя:", i) print("Ваше отчество:", o) # ### Задание 8 # # Напишите программу, которая берет строку "1; 2; 3; 100" и возвращает: # # * список из целых чисел; # * список из чисел с плавающей точкой. # In[4]: s = "1; 2; 3; 100" # In[5]: ints = [int(i) for i in s.split("; ")] print(ints) # In[6]: # альтернатива с обычным циклом for ints = [] for i in s.split("; "): ints.append(int(i)) # In[7]: floats = [float(i) for i in s.split("; ")] print(floats) # In[8]: # альтернатива с обычным циклом for floats = [] for i in s.split("; "): floats.append(float(i)) # ### Задание 9 # # Напишите программу, которая принимает на вход список слов такого вида: # In[21]: words = ["Speak ", "to", "me ", "of", "Florence ", "And ", "of", "the", "Renaissance"] # а возвращает список # In[22]: words_clean = ["speak", "to", "me", "of", "florence", "and", "of", "the", "renaissance"] # Другими словами, программа убирает пробелы в словах и приводит все слова к нижнему регистру. # # **Подсказка:** запросите `help()` по методам `.strip()` и `.lower()`. # In[23]: words_clean = [w.strip().lower() for w in words] print(words_clean)