Кодировка — различия между версиями

Материал из Коми тӧданін
(Новая страница: «Как собрать статистику с помощью словаря (dict), где ключом будет предложение, а значением…»)
 
 
Строка 1: Строка 1:
Как собрать статистику с помощью словаря (dict), где ключом будет предложение, а значением — количество повторов
 
  
  
Это классическая задача, которая решается простым циклом. Вы проверяете, есть ли предложение в словаре: если да — увеличиваете счетчик, если нет — создаете запись со значением 1.
+
import os
 +
from collections import Counter
 +
import traceback
  
==самый лаконичный способ через метод .get():==
+
# 1. Настройка путей
python
+
current_dir = os.path.dirname(os.path.abspath(__file__))
 +
input_path = os.path.join(current_dir, "input.txt")
 +
output_path = os.path.join(current_dir, "stats.txt")
  
sentences = ["Привет мир", "Как дела?", "Привет мир", "Python это круто", "Как дела?"]
+
try:
stats = {}
+
    # 2. Проверка наличия файла
 +
    if not os.path.exists(input_path):
 +
        print(f"ОШИБКА: Файл 'input.txt' не найден по пути:\n{input_path}")
 +
    else:
 +
        # 3. Чтение и подсчет
 +
        with open(input_path, 'r', encoding='utf-8') as f:
 +
            sentences = [line.strip() for line in f if line.strip()]
 +
       
 +
        stats = Counter(sentences)
  
for s in sentences:
+
        # 4. Запись результата
    stats[s] = stats.get(s, 0) + 1
+
        with open(output_path, 'w', encoding='utf-8') as f:
 +
            f.write("Статистика повторов предложений:\n" + "-" * 30 + "\n")
 +
            for sentence, count in stats.most_common():
 +
                f.write(f"{sentence}: {count}\n")
  
print(stats)
+
        print(f"Успех! Статистика сохранена в: {output_path}")
# Результат: {'Привет мир': 2, 'Как дела?': 2, 'Python это круто': 1}
 
  
==Альтернативы для профи:===
+
except Exception:
1.
+
    print("Произошла критическая ошибка:")
 +
    print(traceback.format_exc())
  
     collections.Counter: Самый быстрый и "питонический" вариант.
+
finally:
     python
+
     print("\n" + "="*30)
 
+
     input("Нажмите Enter, чтобы закрыть это окно...")
    from collections import Counter
 
    stats = Counter(sentences)
 
 
 
2.
 
 
 
    collections.defaultdict: Избавляет от необходимости проверять наличие ключа.
 
    python
 
 
 
    from collections import defaultdict
 
    stats = defaultdict(int)
 
    for s in sentences:
 
        stats[s] += 1
 

Текущая версия на 16:04, 13 рака 2026


import os from collections import Counter import traceback

  1. 1. Настройка путей

current_dir = os.path.dirname(os.path.abspath(__file__)) input_path = os.path.join(current_dir, "input.txt") output_path = os.path.join(current_dir, "stats.txt")

try:

   # 2. Проверка наличия файла
   if not os.path.exists(input_path):
       print(f"ОШИБКА: Файл 'input.txt' не найден по пути:\n{input_path}")
   else:
       # 3. Чтение и подсчет
       with open(input_path, 'r', encoding='utf-8') as f:
           sentences = [line.strip() for line in f if line.strip()]
       
       stats = Counter(sentences)
       # 4. Запись результата
       with open(output_path, 'w', encoding='utf-8') as f:
           f.write("Статистика повторов предложений:\n" + "-" * 30 + "\n")
           for sentence, count in stats.most_common():
               f.write(f"{sentence}: {count}\n")
       print(f"Успех! Статистика сохранена в: {output_path}")

except Exception:

   print("Произошла критическая ошибка:")
   print(traceback.format_exc())

finally:

   print("\n" + "="*30)
   input("Нажмите Enter, чтобы закрыть это окно...")