Алла Тамбовцева, НИУ ВШЭ
a = [1, 0, 9, 12, 18, 34, 89, 91, 33, 127]
b = [2, 8, 9, 11, 76, 25, 44]
a
, третий элемент списка a
, последний элемент списка a
.b
элемент 7 (просто допишите в конец).a
на число 8.merged
, который включает в себя все элементы списка a
и списка b
.c
, который получается заменой последнего элемента списка a
на число 100. Сам список a
измениться не должен!# 1
print(a[0], a[2], a[-1])
1 9 127
# 2
b.append(7)
print(b)
[2, 8, 9, 11, 76, 25, 44, 7]
# 3
a[4] = 8
print(a)
[1, 0, 9, 12, 8, 34, 89, 91, 33, 127]
# 4
merged = a + b
print(merged)
[1, 0, 9, 12, 8, 34, 89, 91, 33, 127, 2, 8, 9, 11, 76, 25, 44, 7]
# 5
c = a.copy()
c[-1] = 100
print(a, c)
[1, 0, 9, 12, 8, 34, 89, 91, 33, 127] [1, 0, 9, 12, 8, 34, 89, 91, 33, 100]
Есть список имён:
girls = ["Иветта", "Виолетта", "Кассандра", "Вирджиния",
"Амелия", "Розамунда", "Янина", "Беатриса"]
Используя список girls
, выведите на экран следующие списки:
["Виолетта", "Кассандра", "Вирджиния", "Амелия"]
["Вирджиния", "Амелия", "Розамунда", "Янина", "Беатриса"]
["Иветта", "Виолетта", "Вирджиния", "Амелия"]
["Кассандра", "Амелия", "Розамунда"]
print(girls[1:5])
print(girls[3:])
print(girls[0:2] + girls[3:5])
print(girls[2:3] + girls[4:6])
['Виолетта', 'Кассандра', 'Вирджиния', 'Амелия'] ['Вирджиния', 'Амелия', 'Розамунда', 'Янина', 'Беатриса'] ['Иветта', 'Виолетта', 'Вирджиния', 'Амелия'] ['Кассандра', 'Амелия', 'Розамунда']
# менее красивый вариант для последнего
# главное, не складывать строки и списки
print([girls[2]] + girls[4:6])
['Кассандра', 'Амелия', 'Розамунда']
Дан список L
.
L = [12, 3, 8, 125, 10, 98, 54, 199]
Выведите на экран (последовательно, с новой строчки):
L
;L
.Замените пятый элемент списка L
на 0. Проделайте те же операции, что и раньше. Объясните, почему получаются такие результаты.
# 1
for i in L:
print(i)
12 3 8 125 10 98 54 199
# 2
from math import log
for i in L:
print(log(i))
2.4849066497880004 1.0986122886681098 2.0794415416798357 4.8283137373023015 2.302585092994046 4.584967478670572 3.9889840465642745 5.293304824724492
# 3
L[4] = 0
# логарифм можно брать только от неотрицательных чисел (i > 0)
# поэтому код выдает ошибку и выполнение цикла останавливается
for i in L:
print(log(i))
2.4849066497880004 1.0986122886681098 2.0794415416798357 4.8283137373023015
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-13-af288958d326> in <module> 7 8 for i in L: ----> 9 print(log(i)) ValueError: math domain error
Объясните, что делает следующий код и почему он выдает такие результаты:
M = [1, 2, 3, 4]
for i in range(len(M)):
a = M[i] + M[i-1]
print(a)
5 3 5 7
Разберем код на части. Что такое range(len(M))
?
list(range(len(M))) # индексы элементов списка M
[0, 1, 2, 3]
Значит, цикл 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 не возражает против отрицательных индексов элементов, он просто начинает считать элементы с конца списка.
# альтернатива коду выше
# без нагромождений с range()
# код в этой задаче специально усложнен, чтобы в нем покопаться,
# для Python перебор элементов по индексам с range() нехарактерен
for i in M:
a = i + M[M.index(i) - 1]
print(a)
5 3 5 7
Дан список 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]
# допустим, ждем от пользователя только целые числа
i = int(input("Введите индекс: "))
new = int(input("Введите новое значение: "))
L[i] = new
print(L)
Введите индекс: 3 Введите новое значение: 100 [12, 3, 8, 100, 0, 98, 54, 199]
Напишите программу, которая запрашивает у пользователя с клавиатуры два числа и возвращает список целых чисел, которые находятся в промежутке между этими числами (исключая указанные числа).
Пример: пользователь ввел число 5 и число 9, ему вернулся список [6, 7, 8]
.
start = int(input())
end = int(input())
print(list(range(start + 1, end)))
5 9 [6, 7, 8]
Напишите программу, которая запрашивает у пользователя с клавиатуры целое число $n$ и выводит на экран сумму квадратов целых чисел от 0 до $n$. В процессе решения списки создавать нельзя!
n = int(input("Enter a number: "))
Sum = 0
for i in range(1, n + 1):
Sum = Sum + i ** 2
print(Sum)
Enter a number: 5 55
Напишите программу, которая запрашивает у пользователя его фамилию, имя, отчество, введенные в одну строчку через пробел, и выводит на экран сообщения:
Ваша фамилия: фамилия
Ваше имя: имя
Ваше отчество: отчество
Пример:
Входные данные:
Введите Ваши ФИО: Тамбовцева Алла Андреевна
Выходные данные:
Ваша фамилия: Тамбовцева
Ваше имя: Алла
Ваше отчество: Андреевна
fio = input("Введите Ваши ФИО: ")
f, i, o = fio.split()
print("Ваша фамилия:", f)
print("Ваше имя:", i)
print("Ваше отчество:", o)
Введите Ваши ФИО: Тамбовцева Алла Андреевна Ваша фамилия: Тамбовцева Ваше имя: Алла Ваше отчество: Андреевна
Напишите программу, которая берет строку "1; 2; 3; 100" и возвращает:
# целые числа
s = "1; 2; 3; 100"
nums_raw = s.split("; ")
nums = []
for i in nums_raw:
nums.append(int(i))
print(nums)
[1, 2, 3, 100]
# числа с плавающей точкой
s = "1; 2; 3; 100"
nums_raw = s.split("; ")
nums = []
for i in nums_raw:
nums.append(float(i))
print(nums)
[1.0, 2.0, 3.0, 100.0]
Напишите программу, которая принимает на вход список слов такого вида:
words = ["Speak ", "to", "me ", "of", "Florence ",
"And ", "of", "the", "Renaissance"]
а возвращает список
words_clean = ["speak", "to", "me", "of", "florence",
"and", "of", "the", "renaissance"]
Другими словами, программа убирает пробелы в словах и приводит все слова к нижнему регистру.
Подсказка: запросите help()
по методам .strip()
и .lower()
.
# методы можно «наслаивать» друг на друга
# применять к предыдущему результату
words_clean = []
for w in words:
words_clean.append(w.strip().lower())
print(words_clean)
['speak', 'to', 'me', 'of', 'florence', 'and', 'of', 'the', 'renaissance']