2 / 2 / 0
Регистрация: 23.05.2022
Сообщений: 8
1

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

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

Author24 — интернет-сервис помощи студентам
Задача 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2022, 13:01
Ответы с готовыми решениями:

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

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

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

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

10
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 13:33 2
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  [ТС] 3
Добавлено через 21 минуту
Damenikx, Подскажите пожалуйста А логирование ошибки как сделать?
0
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 14:24 4
rusAga, открываете файл и записываете туда лог, я же не знаю каким образом вы хотите логировать. Чтобы результат добавлялся в файл?
0
2 / 2 / 0
Регистрация: 23.05.2022
Сообщений: 8
17.06.2022, 14:26  [ТС] 5
Damenikx, Да
Цитата Сообщение от rusAga Посмотреть сообщение
Также при желании можно вывести все ошибки в отдельный файл errors.log.
0
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
17.06.2022, 14:32 6
Лучший ответ Сообщение было отмечено 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 7
Помогите, пожалуйста, понять, в чем дело? Написал код к этой задаче, но 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
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17557 / 10311 / 2819
Регистрация: 21.10.2017
Сообщений: 22,367
28.06.2022, 16:40 8
Цитата Сообщение от KorwinDalles Посмотреть сообщение
а по идее выведение exception должно продолжать цикл
С чего бы это?

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

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 10
Если добавить еще одно слово меньше 3-х букв, то он его не видит, заканчивает проверку на первом, как это доработать?
1
0 / 0 / 0
Регистрация: 03.12.2023
Сообщений: 13
17.12.2023, 19:39 11
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
17.12.2023, 19:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2023, 19:39
Помогаю со студенческими работами здесь

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

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

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

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

Дана строка символов (длиной не менее 100 символов). Получить первое натуральное И для которого каждый из символов si и
Получить первое натуральное i, для которого каждый из символов Si и Si+1 строки совпадает с буквой...

Дана строка символов. Подсчитать общее число вхождений символов +, -, *, / в строку. Произвести обмен символов + и -.
помогите, пожалуйста.


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru