Python · Синтаксис · Начальный уровень
Цикл for, списки и кортежи
Практика цикла for в Python на списках и кортежах: перебор коллекций, фильтрация значений, подсчёты, поиск минимума и максимума, работа со строками, датами и вложенными данными.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Построение коллекций во время итерации
#Ключевые паттерны из задач
#Быстрый справочник: цикл for, списки и кортежи
#Упражнения:
Числа через дефис.
#Дан список чисел. Выведите каждое число из списка в той же строке в терминале через дефис. 3-7-1-9-4
numbers = [3, 7, 1, 9, 4]
Решение
numbers = [3, 7, 1, 9, 4]
result = ""
for n in numbers:
result += str(n) + "-"
result = result[:-1]
print(result)
# или
numbers = [3, 7, 1, 9, 4]
for n in numbers[:-1]:
print(n, end="-")
print(numbers[-1])
# или самый короткий вариант через join
numbers = [3, 7, 1, 9, 4]
result = "-".join(str(n) for n in numbers)
print(result)
Чётные числа без нулей.
#Дан список чисел. Добавьте в новый список только чётные числа, нули пропустить.
numbers = [2, 5, 0, 8, 11, 14, 17, 0] new = []
Решение
numbers = [2, 5, 0, 8, 11, 14, 17, 0]
new = []
for n in numbers:
if n != 0 and n % 2 == 0:
new.append(n)
print(new)
# или так можно: сначала проверить ноль, а потом чётность
numbers = [2, 5, 0, 8, 11, 14, 17, 0]
new = []
for n in numbers:
if n == 0:
continue
if n % 2 == 0:
new.append(n)
print(new)
Сумма элементов списка.
#Дан список чисел. Найдите сумму всех элементов списка.
numbers = [5, 10, 15, 20] total = 0
Решение
numbers = [5, 10, 15, 20]
total = 0
for n in numbers:
total += n
print("Сумма:", total)
# или
numbers = [5, 10, 15, 20]
total = sum(numbers)
print("Сумма:", total)
Непустые строки.
#Дан список строк. Добавьте в новый список строки, если они не пустые.
words = ["0000-0000-0000-0000", "", "1111-1111-1111-1111", "2222-2222-2222-2222", ""] new_words = []
Решение
words = ["0000-0000-0000-0000", "", "1111-1111-1111-1111", "2222-2222-2222-2222", ""]
new_words = []
for w in words:
if w != "":
new_words.append(w)
print(new_words)
# или
words = ["0000-0000-0000-0000", "", "1111-1111-1111-1111", "2222-2222-2222-2222", ""]
new_words = []
for w in words:
if w:
new_words.append(w)
print(new_words)
Квадраты чисел больше 10.
#Дан список чисел. Создайте новый список, в котором будут возведённые в квадрат только числа больше 10.
numbers = [3, 12, 5, 18, 7, 25] result = []
Решение
numbers = [3, 12, 5, 18, 7, 25]
result = []
for n in numbers:
if n > 10:
result.append(n ** 2)
print(result)
# или так можно: сначала сохранить квадрат в переменную
numbers = [3, 12, 5, 18, 7, 25]
result = []
for n in numbers:
if n > 10:
square = n ** 2
result.append(square)
print(result)
Дни недели с номерами.
#Дан кортеж с названиями дней недели. Выведите каждый день в формате: "День X: <название>" .
days = ("Понедельник", "Вторник", "Среда", "Четверг", "Пятница")
Решение
days = ("Понедельник", "Вторник", "Среда", "Четверг", "Пятница")
day_num = 1
for day in days:
print(f"День {day_num}: {day}")
day_num += 1
# или так можно через enumerate
days = ("Понедельник", "Вторник", "Среда", "Четверг", "Пятница")
for number, day in enumerate(days, 1):
print(f"День {number}: {day}")
Максимум через цикл.
#Дан список чисел. Найдите максимальное число в списке, используя цикл for .
numbers = [8, 3, 15, 6, 2] max_num = numbers[0]
Решение
numbers = [8, 3, 15, 6, 2]
max_num = numbers[0]
for n in numbers:
if n > max_num:
max_num = n
print("Максимум:", max_num)
# а вообще, для это есть встроенная функция max:
numbers = [8, 3, 15, 6, 2]
max_num = max(numbers)
print("Максимум:", max_num)
Строки длиннее 5 символов.
#Дан список строк. Подсчитайте, сколько строк длиннее 5 символов.
words = ["python", "java", "go", "javascript", "c"] count = 0
Решение
words = ["python", "java", "go", "javascript", "c"]
count = 0
for w in words:
if len(w) > 5:
count += 1
print("Количество строк:", count)
# или так можно: сохранить длину в переменную
words = ["python", "java", "go", "javascript", "c"]
count = 0
for w in words:
length = len(w)
if length > 5:
count += 1
print("Количество строк:", count)
Положительные числа из кортежа.
#Дан кортеж чисел. Выведите только те числа, которые больше 0.
numbers = (-3, 5, -1, 7, 0, -2)
Решение
numbers = (-3, 5, -1, 7, 0, -2)
for n in numbers:
if n > 0:
print(n)
# или так можно: положительные числа собрать в новый список
numbers = (-3, 5, -1, 7, 0, -2)
positive = []
for n in numbers:
if n > 0:
positive.append(n)
print(positive)
Строка через запятую.
#Дан список строк. Создайте строку, которая будет состоять из всех элементов списка, разделённых запятой и пробелом.
words = ["Python", "это", "круто"] result = ""
Решение
words = ["Python", "это", "круто"]
result = ""
for w in words:
result += w + ", "
result = result[:-2]
print(result)
# или короче через join
words = ["Python", "это", "круто"]
result = ", ".join(words)
print(result)
Слова и их длина.
#А будьте так любезны 🧐, создать из этого списка строк, новый список, в котором элементами будут кортежи. В каждом кортеже два элемента: строка и ее длина например: words = ["Python", "это", "круто"] new = [("Python", 6), ("это", 3), ("круто", 5)]
words = ["Python", "это", "круто"] new = []
Решение
words = ["Python", "это", "круто"]
new = []
for word in words:
t = (word, len(word))
new.append(t)
print(new)
# Или то же сомое короче:
words = ["Python", "это", "круто"]
new = []
for word in words:
new.append((word, len(word)))
print(new)
Символы строки в нижнем регистре.
#Хм... Срочно нужно сделать из этой строки "Этой", список, который будет состоять из символов этой строки в нижнем регистре!!! (маленькие буковки)
word = "Этой"
Решение
word = "Этой"
arr = list(word.lower()) # да, это всё.
print(arr)
# или через цикл, чтобы явно увидеть добавление каждого символа
word = "Этой"
arr = []
for char in word:
arr.append(char.lower())
print(arr)
Номер карты через дефис.
#Опять же срочно! Какой-то умник сохранил номер банковской карты в виде списка по 4 цифры карты: card = ["1111", "2222", "3333", "4444"] Сделайте из этого строку в таком формате: norm_card = "1111-2222-3333-4444"
card = ["1111", "2222", "3333", "4444"]
Решение
card = ["1111", "2222", "3333", "4444"]
# Это срочно:
norm_card = "-".join(card)
print(norm_card)
# Это не срочно:
norm_card = ""
for part in card:
norm_card += part + "-"
else:
norm_card = norm_card[:-1]
print(norm_card)
Минимум, максимум и среднее.
#Продолжаем срочный квест! Найдите по быстрому: - минимальное значение в списке; - максимальное значение в списке; - сумму всех значений в списке; - среднее арифметическое значений в списке. А потом, по желанию, не по быстрому.
arr = [10, 100, 500, 11, 18, 99, -3, 101]
Решение
arr = [10, 100, 500, 11, 18, 99, -3, 101]
# по быстрому:
mn = min(arr)
mx = max(arr)
sm = sum(arr)
am = sum(arr)/len(arr)
print(mn, mx, sm, am)
# не по быстрому:
mn = arr[0]
mx = arr[0]
sm = 0
for num in arr:
sm += num
if num < mn:
mn = num
if num > mx:
mx = num
am = sm/len(arr)
print(mn, mx, sm, am)
Фильтр дат после 2027.09.01.
#На последок, за 5 минут до окончания рабочего дня нужно: Есть список с датами в четком формате yyyy.mm.dd: dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"] Нужен новый список где будут только даты после 2027.09.01. Подсказка: попробуйте посравнивать строки через < - > , иногда это полезно😉.
dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"] new = []
Решение
dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"]
new = []
for date in dates:
if date >= "2027.09.01":
new.append(date)
print(new)
Тут важно понимать, что строки сравниваются лексикографически - то есть не как числа дат, а просто как каждый отдельный символ. И это один из редких случаев, когда сравнение строк через < > можно применить, кроме ,конечно, сортировки по алфавиту.
ВАЖНО: формат дат должен быть именно такой, иначе если записать dd.mm.yyyy это уже не будет работать так как мы бы хотели.
# или так можно: сохранить границу в отдельную переменную
dates = ["2027.09.25", "2027.10.14", "2027.03.01", "2027.12.29", "2027.09.11", "2027.05.06"]
border = "2027.09.01"
new_dates = []
for date in dates:
if date > border:
new_dates.append(date)
print(new_dates)