• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 1. Ввод и вывод данных

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Парсер лог-файлов»

Напишите программу, которая принимает лог-файл сервера, находит все уникальные IP-адреса и выводит их количество. 

Несколько строк текста, каждая из которых представляет собой запись в логе. IP-адрес всегда является первым элементом в строке и отделен от остальной части пробелом. Ввод завершается когда передается "0".

Корректный IP адрес должен состоять из 4 целых чисел разделенных точкой. И каждое число должно быть в диапазоне от 0 до 256.

Формат ввода

Несколько строк. ip всегда пишется в самом начале.

Формат Вывода

Одно целое число — количество уникальных IP-адресов, найденных во входных данных.

Пример

Ввод

192.168.0.1 -- [10/Jan/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 2326
192.168.0.2 -- [10/Jan/2024:12:11:06 +0000] "GET /index.html HTTP/1.1" 200 1234
192.168.0.1 -- [11/Jan/2024:16:45:21 +0000] "GET /index.html HTTP/1.1" 200 2326
0

Вывод

2

Подсказка

Тут подсказки не будет, решай сам!

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Множество для хранения уникальных IP-адресов
unique_ips = set()

while True:
    line = input().strip()
    
    # Проверка на завершение ввода
    if line == "0":
        break
    
    # Пропускаем пустые строки
    if not line:
        continue
    
    # Извлекаем первый элемент строки (предполагаемый IP)
    parts = line.split()
    if not parts:
        continue
        
    potential_ip = parts[0]
    
    # Проверяем, является ли строка валидным IPv4 адресом
    # Разделяем строку по точкам
    ip_parts = potential_ip.split('.')
    
    # Должно быть ровно 4 части
    if len(ip_parts) != 4:
        continue
    
    valid_ip = True
    # Проверяем каждую часть IP
    for part in ip_parts:
        # Каждая часть должна состоять только из цифр
        if not part.isdigit():
            valid_ip = False
            break
        
        # Преобразуем в число и проверяем диапазон (0-255)
        num = int(part)
        if num < 0 or num > 255:
            valid_ip = False
            break
        
        # Проверяем, нет ли ведущих нулей (кроме случая, когда число равно 0)
        if len(part) > 1 and part[0] == '0':
            valid_ip = False
            break
    
    # Если IP валиден - добавляем в множество
    if valid_ip:
        unique_ips.add(potential_ip)

# Выводим количество уникальных IP-адресов
print(len(unique_ips))

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!