Глава 2: Циклы
0/0
counter = 1 while counter <= 5: print(counter) counter += 1
["Анна", "Петр", "Мария"]. Используя цикл for, поприветствуйте каждого
names = ["Анна", "Петр", "Мария"] for name in names: print(f"Привет, {name}!")
for number in range(10): print(number)
for i in range(1, 11): if i == 5: break print(i)
number = 1 total = 0 while number <= 10: total += number number += 1 print(f"Сумма: {total}")
for i in range(1, 11): if i % 2 != 0: continue print(i)
["Ноутбук", "Мышь", "Клавиатура"]. Выведите их с порядковыми номерами, используя enumerate
products = ["Ноутбук", "Мышь", "Клавиатура"] for index, product in enumerate(products): print(f"{index + 1}. {product}")
for i in range(10, 0, -1): print(f"Осталось: {i}") print("Старт!")
attempts = 0 max_attempts = 3 correct_password = "admin123" while attempts < max_attempts: password = input("Введите пароль: ") attempts += 1 if password == correct_password: print("Доступ разрешен!") break else: print(f"Неверный пароль. Осталось попыток: {max_attempts - attempts}") else: print("Доступ заблокирован!")
[5, 3, -2, 8, -1, 4]. Найдите первый отрицательный элемент и выведите его индекс
numbers = [5, 3, -2, 8, -1, 4] found = False for index, num in enumerate(numbers): if num < 0: print(f"Первое отрицательное число {num} на позиции {index}") found = True break if not found: print("Отрицательных чисел не найдено")
[{"name": "Мышь", "price": 500},
{"name": "Клавиатура", "price": 1500},
{"name": "Коврик", "price": 300},
{"name": "Монитор", "price": 15000}]products = [
{"name": "Мышь", "price": 500},
{"name": "Клавиатура", "price": 1500},
{"name": "Коврик", "price": 300},
{"name": "Монитор", "price": 15000}
]
print("Товары дешевле 1000 руб:")
for product in products:
if product["price"] >= 1000:
continue
print(f"- {product['name']}: {product['price']} руб")
number = int(input("Введите число для таблицы умножения: ")) for i in range(1, 11): result = number * i print(f"{number} × {i} = {result}")
["https://google.com", "http://example.com", "https://github.com", "ftp://files.com", "https://stackoverflow.com"]urls = [
"https://google.com",
"http://example.com",
"https://github.com",
"ftp://files.com",
"https://stackoverflow.com"
]
invalid_urls = []
for index, url in enumerate(urls):
if not url.startswith("https://"):
invalid_urls.append(f"Позиция {index + 1}: {url}")
if invalid_urls:
print("Найдены небезопасные ссылки:")
for invalid in invalid_urls:
print(f" - {invalid}")
else:
print("Все ссылки безопасны!")
attempts = 0 max_attempts = 5 success = False correct_login = "admin" correct_password = "12345" while attempts < max_attempts and not success: attempts += 1 print(f"\nПопытка входа {attempts} из {max_attempts}") login = input("Логин: ") password = input("Пароль: ") if login == correct_login and password == correct_password: success = True print("Успешный вход в систему!") else: print("Неверный логин или пароль") if attempts < max_attempts: print(f"Осталось попыток: {max_attempts - attempts}") if not success: print("\nДоступ заблокирован после 5 неудачных попыток!")
# Создаем тестовые данные items = [f"Товар_{i}" for i in range(1, 26)] page_size = 5 total_pages = (len(items) + page_size - 1) // page_size for page in range(total_pages): print(f"\n--- Страница {page + 1} из {total_pages} ---") start_index = page * page_size end_index = start_index + page_size for item in items[start_index:end_index]: print(f" • {item}")
["яблоко", "банан", "яблоко", "груша", "банан", "яблоко", "киви"]. Найдите все дубликаты и выведите их с индексами всех вхождений
items = ["яблоко", "банан", "яблоко", "груша", "банан", "яблоко", "киви"] duplicates = {} # Находим все позиции каждого элемента for index, item in enumerate(items): if item in duplicates: duplicates[item].append(index) else: duplicates[item] = [index] # Выводим только дубликаты print("Найдены дубликаты:") for item, positions in duplicates.items(): if len(positions) > 1: print(f"'{item}' найден на позициях: {positions}")
["Chrome", "Firefox", "Safari"]["Логин", "Регистрация", "Поиск", "Корзина", "Оплата"]browsers = ["Chrome", "Firefox", "Safari"] tests = ["Логин", "Регистрация", "Поиск", "Корзина", "Оплата"] # Предопределенные результаты (True = PASS, False = FAIL) results = { "Chrome": [True, True, True, False, True], "Firefox": [True, False, True, True, True], "Safari": [True, True, False, True, False] } print("Результаты тестирования:") print("-" * 50) for browser in browsers: print(f"\n{browser}:") passed = 0 failed = 0 for test_index, test in enumerate(tests): # Получаем результат для текущего браузера и теста test_passed = results[browser][test_index] result = "PASS" if test_passed else "FAIL" print(f" {test}: {result}") if test_passed: passed += 1 else: failed += 1 print(f" Итого: {passed} успешно, {failed} провалено") # Общая статистика print("\n" + "=" * 50) print("Общая статистика:") total_tests = len(browsers) * len(tests) total_passed = sum(sum(results[browser]) for browser in browsers) total_failed = total_tests - total_passed print(f"Всего тестов: {total_tests}") print(f"Успешно: {total_passed} ({total_passed * 100 // total_tests}%)") print(f"Провалено: {total_failed} ({total_failed * 100 // total_tests}%)")
order_id = "ORD-12345" max_checks = 10 checks = 0 order_ready = False print(f"Проверка статуса заказа {order_id}") print("Нажимайте Enter для проверки статуса (введите 'готов' когда заказ готов)") while checks < max_checks and not order_ready: checks += 1 print(f"\nПроверка {checks} из {max_checks}") # Симуляция проверки статуса status = input("Введите статус (или Enter для 'обработка'): ").strip() if status == "готов": order_ready = True print(f"✓ Заказ готов! Потребовалось проверок: {checks}") else: current_status = status if status else "обработка" print(f"Статус: {current_status}") if checks < max_checks: print("Заказ еще не готов, проверим позже...") if not order_ready: print(f"\n✗ Заказ не готов после {max_checks} проверок") print("Обратитесь в службу поддержки")
[{"name": "email", "value": "test@", "type": "email"},
{"name": "age", "value": "17", "type": "age"},
{"name": "phone", "value": "123", "type": "phone"},
{"name": "password", "value": "qwe", "type": "password"}]form_fields = [
{"name": "email", "value": "test@", "type": "email"},
{"name": "age", "value": "17", "type": "age"},
{"name": "phone", "value": "123", "type": "phone"},
{"name": "password", "value": "qwe", "type": "password"}
]
errors = []
valid_fields = 0
print("Валидация формы:")
print("-" * 40)
for index, field in enumerate(form_fields):
field_type = field["type"]
field_value = field["value"]
field_name = field["name"]
is_valid = False
# Проверка в зависимости от типа поля
if field_type == "email":
if "@" in field_value and "." in field_value.split("@")[-1]:
is_valid = True
elif field_type == "age":
if field_value.isdigit() and int(field_value) >= 18:
is_valid = True
elif field_type == "phone":
phone_digits = field_value.replace("+", "").replace("-", "")
if len(phone_digits) >= 10 and phone_digits.isdigit():
is_valid = True
elif field_type == "password":
if len(field_value) >= 8:
is_valid = True
if is_valid:
print(f"✓ Поле '{field_name}': OK")
valid_fields += 1
else:
error_msg = f"Поле '{field_name}' (позиция {index + 1}): некорректное значение '{field_value}'"
print(f"✗ {error_msg}")
errors.append(error_msg)
print("\n" + "=" * 40)
print(f"Результат: {valid_fields}/{len(form_fields)} полей валидны")
if errors:
print("\nОшибки валидации:")
for error in errors:
print(f" - {error}")
else:
print("\nФорма заполнена корректно!")
[{"name": "Иван", "role": "user"},
{"name": "Мария", "role": "moderator"},
{"name": "Петр", "role": "user"}]users = [
{"name": "Иван", "role": "user"},
{"name": "Мария", "role": "moderator"},
{"name": "Петр", "role": "user"}
]
print("Поиск администратора...")
for user in users:
if user["role"] == "admin":
print(f"Администратор найден: {user['name']}")
break
else:
print("Внимание: В системе нет администратора!")
print("Назначаем первого модератора администратором...")
for user in users:
if user["role"] == "moderator":
user["role"] = "admin"
print(f"{user['name']} теперь администратор")
break
["продукт_1", "тест_данные", "продукт_2", "тест_кейс", "продукт_3"]. Удалите все элементы, содержащие слово "тест", не нарушая итерацию
# Способ 1: Итерация по копии items = ["продукт_1", "тест_данные", "продукт_2", "тест_кейс", "продукт_3"] print("Исходный список:", items) for item in items.copy(): # Важно: items.copy() if "тест" in item: items.remove(item) print(f"Удален: {item}") print("Результат:", items) # Способ 2: Обратный порядок items2 = ["продукт_1", "тест_данные", "продукт_2", "тест_кейс", "продукт_3"] print("\nСпособ 2 - обратный порядок:") for i in range(len(items2) - 1, -1, -1): if "тест" in items2[i]: removed = items2.pop(i) print(f"Удален: {removed}") print("Результат:", items2)
["apple", "banana", "orange", "grape", "kiwi"]["banana", "kiwi", "mango", "apple", "peach"]# Неоптимальный способ (для сравнения) list1 = ["apple", "banana", "orange", "grape", "kiwi"] list2 = ["banana", "kiwi", "mango", "apple", "peach"] print("Неоптимальный поиск:") common_slow = [] iterations = 0 for item1 in list1: for item2 in list2: iterations += 1 if item1 == item2: common_slow.append(item1) break print(f"Общие элементы: {common_slow}") print(f"Количество сравнений: {iterations}") # Оптимизированный способ print("\nОптимизированный поиск:") set2 = set(list2) # O(n) один раз common_fast = [] iterations_fast = 0 for item in list1: iterations_fast += 1 if item in set2: # O(1) для каждой проверки common_fast.append(item) print(f"Общие элементы: {common_fast}") print(f"Количество операций: {iterations_fast}")
while условие:
# код
# не забудьте изменить условие!
for элемент in коллекция:
# работа с элементом
range(5) → 0, 1, 2, 3, 4range(1, 6) → 1, 2, 3, 4, 5range(10, 0, -1) → обратный отсчетfor индекс, значение in enumerate(список):
print(f"{индекс}: {значение}")
break - выход из циклаcontinue - пропуск итерацииelse - выполнится если не было break