• 1
    إدخال وإخراج البيانات
    • المهام
  • 2
    الشروط
    • المهام
  • 3
    حلقة for
    • المهام
  • 4
    السلاسل النصية
    • المهام
  • 5
    حلقة while
    • المهام
  • 6
    القوائم
    • المهام
  • 7
    مصفوفات ثنائية الأبعاد
    • المهام
  • 8
    القواميس
    • المهام
  • 9
    المجموعات
    • المهام
  • 10
    الدوال والتكرار
    • المهام
  • к

درس 1. Entering and output of data

الصعوبة:

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

مسألة«محلل سجلات الملفات»

💻 Python

اكتب برنامجًا يقبل ملف سجل الخادم، ويجد جميع عناوين IP الفريدة ويعرض عددها. & nbsp;

rn

بضعة أسطر من النص، بضعة أسطر من النص، بضعة أسطر. كل منها عبارة عن سجل في السجل. عنوان IP هو دائمًا العنصر الأول في السطر ويتم فصله عن باقي النص بمسافة. ينتهي الإدخال عند إرسال "0".

تنسيق الإدخال

عدة أسطر. يتم كتابة عنوان IP دائمًا في البداية.

تنسيق الإخراج

رقم واحد & mdash; عدد عناوين IP الفريدة الموجودة في بيانات الإدخال.

مثال

إدخال

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

إخراج

2

تلميح

There will be no clue here, decide for yourself!

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 — يمكنني شرح الدوال والطرق ومساعدتك في المهمة الحالية!