Модуль 23. 6. Чат

Модуль 23. 6. Чат

Реализуйте программу — чат, в котором могут участвовать сразу несколько человек, то есть программа может работать одновременно для нескольких пользователей. При запуске запрашивается имя пользователя. После этого он выбирает одно из действий:

  1. Посмотреть текущий текст чата.
  2. Отправить сообщение (затем вводит сообщение).

Действия запрашиваются бесконечно.

Примечание: для решения задачи вам будет достаточно текущих знаний, нужно лишь проявить немного фантазии и хитрости. Не нужно лезть в дебри работы с сетями, создания GUI-приложений и прочих штук. (Но если очень хочется, то останавливать вас никто не будет!)

ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 5. Текстовый калькулятор

Модуль 23. Задача 5. Текстовый калькулятор

Иван стоит на пороге величайшего открытия (не будем его расстраивать), которое перевернёт представление обо всей математике и программировании. Имя этому открытию — текстовый калькулятор. Правда, код для своего открытия ему сложно написать самому, и поэтому он попросил вас помочь ему. Так что уже можно бежать в патентное бюро.

Есть файл calc.txt, в котором хранятся записи вида:

- 100 + 34,
- 23 / 4,

то есть ОПЕРАНД_1 ОПЕРАЦИЯ ОПЕРАНД_2, разделённые пробелами.

Операнды — целые числа. Операции — арифметические (включая деление нацело и нахождение остатка).

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

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

Пример 1

Содержимое файла calc.txt:

100 + 34
10 +* 3
23 / 4

Содержимое консоли:

Обнаружена ошибка в строке: 10 +* 3   Хотите исправить? Да
Введите исправленную строку: 10 + 3

Сумма результатов: 152.75

Пример 2

Содержимое файла calc.txt:

100 + 34
10 +* 3
20 -* 2
23 / 4

Содержимое консоли:

Обнаружена ошибка в строке: 10 +* 3   Хотите исправить? Нет
Обнаружена ошибка в строке: 20 -* 2   Хотите исправить? Да
Введите исправленную строку: 20 - 2

Сумма результатов: 157.75
ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 4. Регистрация

Модуль 23. Задача 4. Регистрация

У вас есть файл с протоколом регистраций пользователей на сайте — registrations.txt. Каждая строка содержит имя, емейл и возраст, разделённые пробелами. Например: «Василий test@test.ru 27«.

Напишите программу, которая проверяет данные из файла для каждой строки:

  • Присутствуют все три поля.
  • Поле «Имя» содержит только буквы.
  • Поле «Имейл» содержит @ и . (точку).
  • Поле «Возраст» является числом от 10 до 99.

В результате проверки сформируйте два файла:

  • registrations_good.log — для правильных данных, записывать строки в том виде, как есть;
  • registrations_bad.log — для ошибочных, записывать строку и вид ошибки.

Для валидации строки данных напишите функцию, которая может выдавать исключения:

  • НЕ присутствуют все три поля: IndexError.
  • Поле «Имя» содержит НЕ только буквы: NameError.
  • Поле «Имейл» НЕ содержит @ и . (точку): SyntaxError.
  • Поле «Возраст» НЕ является числом от 10 до 99: ValueError.

Формат выходных данных

Содержимое файла registrations_bad.log:
Ольга kmrn@gmail.com 123        Поле «Возраст» НЕ является числом от 10 до 99
Чехова kb@gmail.com 142     Поле «Возраст» НЕ является числом от 10 до 99
……
Степан ky 59        Поле «Имейл» НЕ содержит @ и . (точку)
……

Содержимое файла registrations_good.log:
Геннадий ttdababmt@gmail.com 69
Ольга ysbxur@gmail.com 20
……
ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 3. Счастливое число

Модуль 23. Задача 3. Счастливое число

Напишите программу, которая запрашивает у пользователя число до тех пор, пока сумма этих чисел не станет больше либо равна 777. Каждое введённое число при этом дозаписывается в файл out_file.txt. Сделайте так, чтобы перед дозаписью программа с вероятностью 1 к 13 выбрасывала пользователю случайное исключение и завершалась.

Пример 1

Введите число: 10
Введите число: 500
Введите число: 200
Введите число: 67
Вы успешно выполнили условие для выхода из порочного цикла!
Содержимое файла out_file.txt:
10
500
200
67

Пример 2

Введите число: 10
Введите число: 500
Вас постигла неудача!
Содержимое файла out_file.txt:
10
ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 2. Координаты

Модуль 23. Задача 2. Координаты

Есть файл coordinates.txt, в котором хранится N пар из чисел X и Y. Оба числа передаются в первую функцию, где к каждой координате прибавляется случайное число (от 0 до 5 и от 0 до 10) и возвращается результат деления X на Y. Затем эти же координаты передаются во вторую функцию, где уже отнимается случайное число и возвращается Y / X.

После этого формируется случайное число от 0 до 100, затем в файл result.txt в каждую строку записывается отсортированный список, состоящий из этого случайного числа и двух полученных результатов.

Один программист уже написал за нас программу для этой задачи, но «почему-то» его вариант решения отклонили. Вот его код:

import random

def f(x, y):
    x += random.randint(0, 10)
    y += random.randint(0, 5)
    return x / y

def f2(x, y):
    x -= random.randint(0, 10)
    y -= random.randint(0, 5)
    return y / x

try:
    file = open('coordinates.txt', 'r')
    for line in file:
        nums_list = line.split()
        res1 = f(int(nums_list[0]), int(nums_list[1]))
        try:
            res2 = f2(int(nums_list[0]), int(nums_list[1]))
            try:
                number = random.randint(0, 100)
                file_2 = open('result.txt', 'w')
                my_list = sorted([res1, res2, number])
                file_2.write(' '.join(my_list))
            except Exception:
                print("Что-то пошло не так : ")
        except Exception:
            print("Что-то пошло не так со второй функцией")
        finally:
            file.close()
            file_2.close()
except Exception:
    print("Что-то пошло не так с первой функцией")

Отредактируйте и исправьте программу, убрав лишние вложенности try..except.

ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 1. Имена 2

Модуль 23. Задача 1. Имена 2

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

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

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

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

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

Ответ в консоли:
Ошибка: менее трёх символов в строке 4.
Общее количество символов: 48.
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 9. Война и мир

Модуль 22. Задача 9. Война и мир

Мало кто не знает про знаменитый роман Л.Н.Толстого “Война и мир”. Это довольно объемное произведение лежит в архиве voina-i-mir.zip. Напишите программу, которая подсчитает статистику по буквам (не только русского алфавита) в этом романе и выведет результат на экран (или в файл). Результат должен быть отсортирован по частоте встречаемости букв (по возрастанию или убыванию). Регистр символов имеет значение.

Постарайтесь написать программу так, чтобы для её работы не требовалась распаковка архива “в ручную”.

ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 8. Частотный анализ

Модуль 22. Задача 8. Частотный анализ

Есть файл text.txt, который содержит текст. Напишите программу, которая выполняет частотный анализ, определяя долю каждой буквы английского алфавита в общем количестве английских букв в тексте и выводит результат в файл analysis.txt. Символы, не являющиеся буквами английского алфавита, учитывать не нужно.

В файл analysis.txt выводится доля каждой буквы, встречающейся в тексте, с тремя знаками в дробной части. Буквы должны быть отсортированы по убыванию их доли. Буквы с равной долей должны следовать в алфавитном порядке.

Пример:

Содержимое файла text.txt:
Mama myla ramu.

Содержимое файла analysis.txt:
a 0.333
m 0.333
l 0.083
r 0.083
u 0.083
y 0.083
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 7. Турнир

Модуль 22. Задача 7. Турнир

В файле first_tour.txt записано число K и данные об участниках турнира по настольной игре “Орлеан”: фамилии, имена и количество баллов, набранных в первом туре. Во второй тур проходят участники, которые набрали более K баллов в первом туре.

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

В первой строке нужно вывести в файл second_tour.txt количество участников второго тура. Затем программа должна вывести фамилии, инициалы и количество баллов всех участников, прошедших во второй тур, с нумерацией. Имя нужно сократить до одной буквы. Список должен быть отсортирован по убыванию набранных баллов.

Пример:

Содержимое файла first_tour.txt:
80
Ivanov Serg 80
Segeev Petr 92
Petrov Vasiliy 98
Vasiliev Maxim 78

Содержимое файла second_tour.txt:
2
1) V. Petrov 98
2) P. Sergeev 92
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 6. Паранойя

Модуль 22. Задача 6. Паранойя

Артуру постоянно кажется, что за ним следят и все хотят своровать “крайне важную информацию” с его компьютера, включая переписку с людьми. Поэтому он эти переписки шифрует. И делает он это с помощью шифра Цезаря (чем веселит агента службы безопасности)

Напишите программу, которая шифрует содержимое текстового файла text.txt шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на 2, третьей строки — на три и т.д. Результат вывести в файл cipher_text.txt

Пример:

Содержимое файла text.txt:
Hello
Hello
Hello
Hello

Содержимое файла cipher_text.txt:
Ifmmp
Jgnnq
Khoor
Lipps
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 5. Сохранение

Модуль 22. Задача 5. Сохранение

Мы продолжаем работать над усовершенствованием своего текстового редактора. Конечно же, при работе с редактором, пользователь, скорее всего, захочет сохранить то, что он написал, в отдельный файл. Ну или перезаписать тот, в котором он продолжил работать.

Пользователь вводит строку text. Реализуйте функцию, которая запрашивает у пользователя куда он хочет сохранить эту строку — вводится последовательность папок и имя файла (расширение .txt). Затем в этот файл сохраняется значение переменной text. Если этот файл уже существует, то спросить у пользователя действительно ли он хочет перезаписать его.
Обеспечьте контроль ввода: указанный из папок путь должен существовать на диске

Пример 1:

Введите строку: testiruyem

Куда хотите сохранить документ? Введите последовательность папок (через пробел):
Users Roman PycharmProjects Skillbox Module22

Введите имя файла: my_document
Файл успешно сохранён!

Содержимое файла:
testiruyem

Пример 2:

Введите строку: programm test

Куда хотите сохранить документ? Введите последовательность папок (через пробел):
Users Roman PycharmProjects Skillbox Module22

Введите имя файла: my_document
Вы действительно хотите перезаписать файл? да
Файл успешно перезаписан!

Содержимое файла:
programm test

ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 4. Файлы и папки

Модуль 22. Задача 4. Файлы и папки

Напишите программу, которая получает на вход путь до каталога (это может быть и просто корень диска) и выводит общее количество файлов и подкаталогов в нём. Также выведите на экран размер каталога в килобайтах (1 Килобайт = 1024 байта)

Важный момент: чтобы посчитать сколько весит каталог, нужно найти сумму размеров всех вложенных в него файлов.

Результат работы программы на примере python_basic\Module14:

Пожалуйста, введите путь до директории: E:\PycharmProjects\python_basic\Module14
Размер каталога (в Кб): 8.373046875
Количество подкаталогов: 7
Количество файлов: 15
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 3. Дзен Пайтона 2

Модуль 22. Задача 3. Дзен Пайтона 2

Напишите программу, которая определяет сколько букв (латинского алфавита), слов и строк в файле zen.txt (который содержит всё тот же Дзен Пайтона). Выведите три найденных числа на экран.

Дополнительно: выведите на экран букву, которая встречается в тексте наименьшее количество раз

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

Количество букв в файле: 
Количество слов в файле: 
Количество строк в файле: 
Наиболее редкая буква: 
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 2. Дзен Пайтона

Модуль 22. Задача 2. Дзен Пайтона

У вас есть файл zen.txt, в котором хранится так называемый “Дзен Пайтона” — текст философии программирования на языке Python.

Напишите программу, которая выводит на экран все строки данного файла в обратном порядке.

Кстати, попробуйте открыть консоль Питона и ввести команду “import this”.

Результат работы программы:

Namespaces are one honking great idea -- let's do more of those!
If the implementation is easy to explain, it may be a good idea.
If the implementation is hard to explain, it's a bad idea.
Although never is often better than *right* now.
.....
ЧИТАТЬ ДАЛЕЕ …
Модуль 22. Задача 1. Сумма чисел 2

Модуль 22. Задача 1. Сумма чисел 2

Во входном файле numbers.txt записано N целых чисел, которые могут быть разделены пробелами и концами строк. Напишите программу, которая выводит сумму чисел в выходной файл answer.txt

Пример:

Содержимое файла numbers.txt
     2

2
  2
         2

Содержимое файла answer.txt
8
ЧИТАТЬ ДАЛЕЕ …