Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/64: Рейтинг темы: голосов - 64, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 23.05.2022
Сообщений: 8

Общее количество символов в строках, исключая строки с длиной меньше 3 символов

17.06.2022, 13:01. Показов 14764. Ответов 10

Студворк — интернет-сервис помощи студентам
Задача 1. Имена 2
Что нужно сделать

Есть файл people.txt, в котором построчно хранится N имён пользователей.

Напишите программу, которая берёт количество символов в каждой строке файла и в качестве ответа выводит общую сумму. Если в какой-либо строке меньше трёх символов (не считая литерала \n), то вызывается ошибка и сообщение, в какой именно строке ошибка возника. Программа при этом не завершается и обрабатывает все имена файла.

Также при желании можно вывести все ошибки в отдельный файл errors.log.



Пример работы программы



Содержимое файла people.txt:
Василий
Николай
Надежда
Никита
Ян
Ольга
Евгения
Кристина



Ответ в консоли:

Ошибка: менее трёх символов в строке 5.

Общее количество символов: 49.


Вот, то что написал я.
Но срабатывает и пишет в консоли что кол-во символов 98 хотя их 49 , помогите пожалуйста. Так же помогите с логированием


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try:
    with open('people.txt', 'r') as people_file:
        for i_line in people_file:
            try:
                length = len(i_line)
                line_count += 1
                if i_line.endswith('\n'):
                    length -= 1
                if length < 3:
                    raise ValueError('Ошибка: менее трёх символов в строке: {}'.format(line_count))
 
                sym_sum += length
            except ValueError:
                print(f'Ошибка: менее трёх символов в строке {line_count}.')
finally:
    print('Общее количество символов:', sym_sum)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2022, 13:01
Ответы с готовыми решениями:

Сосчитать общее количество символов во всех строках
Разработать программу, которая читает откуда-либо текстовую строку, выводит ее куда-либо и сообщает общее количество символов во всех...

Строки: найти слова длиной меньше 3 символов
Выделить те слова, которые по длине меньше 3.

Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string>
Здравствуйте, у меня такой вопрос, например существует контейнер multiset&lt;string&gt;, как можно вывести на экран строки длиной больше 5 и...

10
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 13:33
Python
1
2
3
4
5
6
7
8
with open('people.txt', 'r', encoding='utf-8') as people_file:
    name_line = people_file.read().split('\n')
    print(name_line)
    res = ''.join(name_line)
    for number, name in enumerate(name_line):
        if len(name) < 3:
            print(f'менее трёх символов в строке {number+1}')
            print(f'Общее количество символов: {len(res)}')
Думаю else ты сам допишешь уже

Добавлено через 1 минуту
А, стоп, я походу не так сделал...Там надо через исключение.

Добавлено через 13 минут
Исправил:

Python
1
2
3
4
5
6
7
8
9
10
11
12
with open('people.txt', 'r', encoding='utf-8') as people_file:
    name_line = people_file.read().split('\n')
    print(name_line)
    res = ''.join(name_line)
    try:
        for number, name in enumerate(name_line):
            if len(name) < 3:
                raise ValueError(f'менее трёх символов в строке {number+1}')
    except ValueError:
        print(f'менее трёх символов в строке {number+1}')
    finally:
        print(f'Общее количество символов: {len(res)}')
1
2 / 2 / 0
Регистрация: 23.05.2022
Сообщений: 8
17.06.2022, 14:22  [ТС]
Добавлено через 21 минуту
Damenikx, Подскажите пожалуйста А логирование ошибки как сделать?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 14:24
rusAga, открываете файл и записываете туда лог, я же не знаю каким образом вы хотите логировать. Чтобы результат добавлялся в файл?
0
2 / 2 / 0
Регистрация: 23.05.2022
Сообщений: 8
17.06.2022, 14:26  [ТС]
Damenikx, Да
Цитата Сообщение от rusAga Посмотреть сообщение
Также при желании можно вывести все ошибки в отдельный файл errors.log.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 14:32
Лучший ответ Сообщение было отмечено rusAga как решение

Решение

rusAga, а, ну это моё проклятье, не правильно читать или недочитывать задачу

Добавлено через 5 минут
Как вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import datetime
 
with open('people.txt', 'r', encoding='utf-8') as people_file:
    name_line = people_file.read().split('\n')
    print(name_line)
    res = ''.join(name_line)
    try:
        for number, name in enumerate(name_line):
            if len(name) < 3:
                raise ValueError(f'менее трёх символов в строке {number+1}')
    except ValueError:
        print(f'менее трёх символов в строке {number+1}')
        with open('errors.txt', 'a', encoding='utf-8') as rec:
            print(f'{datetime.datetime.now()} менее трёх символов в строке {number+1}', file=rec)
    finally:
        print(f'Общее количество символов: {len(res)}')
2
6 / 6 / 0
Регистрация: 03.04.2022
Сообщений: 6
28.06.2022, 15:52
Помогите, пожалуйста, понять, в чем дело? Написал код к этой задаче, но raise работает как break и завершает цикл, а по идее выведение exception должно продолжать цикл. Мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sym_sum = 0
line_count = 0
with open('people.txt', 'r') as people_file:
    try:
        for i_line in people_file:
            length = len(i_line)
            line_count += 1
            if i_line.endswith('\n'):
                length -= 1
            sym_sum += length
            if length < 3:
                raise ValueError
    except FileNotFoundError:
        print('Файл не найден ')
    except ValueError:
        print('Имя в строке {} меньше трех букв'.format(line_count))
        with open('errors.log', 'a') as error_file:
            error_file.write(i_line)
    finally:
        print('Сумма символов: ', sym_sum)
Добавлено через 6 минут
Переменные sym_sum и line_count нужно объявить заранее.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.06.2022, 16:40
Цитата Сообщение от KorwinDalles Посмотреть сообщение
а по идее выведение exception должно продолжать цикл
С чего бы это?

Добавлено через 1 минуту
Ставь еще один трай..эксепт внутри цикла
1
6 / 6 / 0
Регистрация: 03.04.2022
Сообщений: 6
29.06.2022, 15:18
Спасибо, все работает!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sym_sum = 0
line_count = 0
with open('people.txt', 'r') as people_file:
    try:
        for i_line in people_file:
            try:
                length = len(i_line)
                line_count += 1
                if i_line.endswith('\n'):
                    length -= 1
                sym_sum += length
                if length < 3:
                    raise ValueError
            except ValueError:
                print('Имя в строке {} меньше трех букв'.format(line_count))
                with open('errors.log', 'a') as error_file:
                    error_file.write(i_line)
    except FileNotFoundError:
        print('Файл не найден ')
    finally:
        print('Сумма символов: ', sym_sum)
0
1 / 1 / 0
Регистрация: 29.01.2023
Сообщений: 4
01.02.2023, 22:10
Если добавить еще одно слово меньше 3-х букв, то он его не видит, заканчивает проверку на первом, как это доработать?
1
0 / 0 / 0
Регистрация: 03.12.2023
Сообщений: 13
17.12.2023, 19:39
Sergey Popov , вот это работает с несколькими словами меньше 3-х букв, пишет ошибки в консоль и еще создает файл с ошибками:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import datetime
def err_and_count(file_name): 
    total_symbols = 0 
    line_count = 0 
    try: 
        with open(file_name, 'r', encoding='utf-8') as file: 
            file.read().split('\n')
            file.seek(0) 
            print('\nОтвет в консоли:') 
            for line in file: 
                try: 
                    line_count += 1 
                    total_symbols += len(line.strip()) 
                    if len(line.strip()) < 3: 
                        raise ValueError 
                except ValueError: 
                    print(f'Ошибка: менее трёх символов в строке {line_count}.') 
                    with open('errors.txt', 'a', encoding='utf-8') as rec:
                        print(f'{datetime.datetime.now()} менее трёх символов в строке {line_count}', file=rec)
    finally: 
        return total_symbols 
 
file_name = 'people.txt' 
total_number_of_characters = err_and_count(file_name) 
print(f'Общее количество символов: {total_number_of_characters}.')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2023, 19:39
Помогаю со студенческими работами здесь

Вывести на экран строки длиной больше 10 и меньше 50 символов из контейнера multiset<std::string, Compare>
Есть код программы, только в нём используется контейнер multimap, и строки с длиной больше 11 и меньше 20. В файл должны быть записаны...

В одномерном массиве символов найти количество повторяющихся последовательностей символов с длиной больше или равно двум
В одномерном массиве символов найти количество повторяющихся последовательностей символов с длиной больше или равно двум. Например, в...

Удалить каждую пару символов 'PQ' и подсчитать общее количество символов '.' и ','
Доброго времени суток, нужна помощь в написании программы. Возникают трудности с ней. &quot;Удалить каждую пару символов 'PQ' и...

С помощью подпрограммы определить количество символов ‘п' и ‘у’ в строках из 100 и 300 символов.
Ребят,вот эту задачу помогите ещё сделать пожалуйста С помощью подпрограммы определить количество символов ‘п' и ‘у’ в ...

Задана строка текста длиной не менее двадцати символов. Выполнить перевод всех символов этой строки из верхнего регистра в нижний, и наоборот
1. Ввести множество, запись или строку с помощью клавиатуры. 2. Вывести на экран монитора исходную запись, множество или строку. 3....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru