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), ("це", 2), ("круто", 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)