Exemplo n.º 1
0
def run():
    """Выполняет задание 1 урока 6"""
    print("\r\nЗадание 1\r\n")

    user_input = input(
        "Начните вводить данные. Пустой ввод - отмена (завершение) ввода." +
        "Запись в файл произойдёт после завершения ввода.\r\n> ")
    strings = []

    while user_input != '' and not user_input.isspace():
        strings.append(user_input + "\n")
        user_input = input("> ")

    file_path = os.path.join(tools.get_dir(), "lesson5_task1.txt")

    try:
        with open(file_path, 'wt') as stream:
            stream.writelines(strings)
    except:
        print("Ошибка записи в файл")
        return

    print("Запись в файл успешна.", end=" ")
    tools.ask_to_read_file(file_path)

    print("Задение выполнено\r\n")
Exemplo n.º 2
0
def run():
    """Выполняет задание 2 урока 6"""
    print("\r\nЗадание 2\r\n")

    path = tools.get_dir("lesson5_data")
    if path is None:
        print(
            "Директория с данными не обнаружена. Проверьте, что Вы загрузили все файлы проекта."
        )
        return

    path = os.path.join(path, "task2_data.txt")
    if not os.path.exists(path) or not os.path.isfile(path):
        print("Файл с данным для этого задания не обнаружен.\r\n" + path +
              "\r\nПроверьте, что Вы загрузили все файлы проекта.")
        return

    strings = []
    try:
        with open(path) as stream:
            strings = stream.readlines()
    except:
        print("Ошибка чтения файла")
        return

    # Теперь немного "магии одной строки".
    # Следующая команда последовательно:
    # - берёт каждую прочитанную строку, если она пустая, то пропускает её, а для остальных:
    #       - удаляет пробельные символы в начале и конце строки;
    #       - удаляет все символы, не являющиеся пробельными либо буквами латиницы и кириллицы;
    #       - из полученной строки удаляет задублированные пробелы. Они могут появляться, после
    #           предыдущей команды при удалении тире ('_-_' -> '__');
    #       - считает количество пробелов, разделяющих слова, и добавляет единицу - это количество слов;
    #       - добавляет полученную строку в перечисление кортежей, где первую часть занимает посчитанное количество слов,
    #           а во второй части находится исходная строка;
    # - сформированное перечисление кортежей пронумировывает (начиная со значения 1) и передаёт в словарь, где
    #     ключом выступает номер строки, а значением - вышеуказанный кортеж из строки и количества слов в этой;
    magic = {
        string_num: line
        for string_num, line in enumerate((
            (re.sub(r"[^a-zA-ZА-Яа-я\s]", '', line.strip()).replace(
                '  ', ' ').count(' ') + 1, line)
            for line in strings if not line.isspace() and line != ''),
                                          start=1)
    }

    # осталось только красиво вывести на экран
    print("Стр.№", "Кол.", "Строка", sep="\t| ")
    print('-' * 30)
    for key, value in magic.items():
        print(key, value[0], value[1].replace("\n", ''), sep="\t| ")

    print("Задение выполнено\r\n")
Exemplo n.º 3
0
def run():
    """Выполняет задание 4 урока 6"""
    print("\r\nЗадание 4\r\n")

    user_input = input(
        "Введите набор целых положительных чисел, разделяя их пробелами (другие данные будут прогнорированы):\r\n> "
    )

    numbers = [int(x) for x in user_input.split() if x.isdigit()]

    file_path = os.path.join(tools.get_dir(), "lesson5_task4.txt")

    with open(file_path, 'w') as stream:
        print(*numbers, file=stream)

    print("Ваш массив данных размещён в файле:\r\n" + file_path)
    print("Сумма введённых чисел: " + str(sum(numbers)))
    tools.ask_to_read_file(file_path)

    print("Задение выполнено\r\n")
Exemplo n.º 4
0
def run():
    """Выполняет задание 3 урока 6"""
    print("\r\nЗадание 3\r\n")

    # Часть 1 - Зарплата сотрудников
    print("Часть 1 - Зарплата сотрудников")
    directory = tools.get_dir("lesson5_data")

    if directory is None:
        print(
            "Директория с данными не обнаружена. Проверьте, что Вы загрузили все файлы проекта."
        )
        return

    file = os.path.join(directory, "task3a_data.txt")
    if not os.path.exists(file) or not os.path.isfile(file):
        print(
            "Файл с указанным именем не обнаружен, либо не является файлом." +
            "Проверьте, что Вы загрузили все файлы проекта.")
        return

    strings = []
    try:
        with open(file) as stream:
            strings = stream.readlines()
    except:
        print("Ошибка чтения файла")
        return

    persons = {
        line.split(' ')[0]: float(line.split(' ')[1])
        for line in strings if line != ''
    }

    print("Оклад меньше 20 тыс. у следующих сотрудников: ",
          *[person for person in persons.keys() if persons[person] < 20_000])
    print("Средняя заработная плата: " +
          str(round(sum(persons.values()) / len(persons), 2)))

    # Часть 2 - Числительные
    print("Часть 2 - Числительные")

    dictionary = {
        "One": "Один",
        "Two": "Два",
        "Three": "Три",
        "Four": "Четыре",
        "Five": "Пять",
        "Six": "Шесть",
        "Seven": "Семь",
        "Eight": "Восемь",
        "Nine": "Девять",
        "Zero": "Ноль"
    }

    in_file = os.path.join(directory, "task3b_data.txt")
    if not os.path.exists(file) or not os.path.isfile(file):
        print(
            "Файл с указанным именем не обнаружен, либо не является файлом." +
            "Проверьте, что Вы загрузили все файлы проекта.")
        return

    directory = tools.get_dir()
    if directory is None:
        print("Ошибка создания директории для хранения новых фалов.")
        return

    out_file = os.path.join(directory, "lesson5_task3.txt")
    try:
        with open(in_file) as in_stream:
            with open(out_file, 'w') as out_stream:
                while True:
                    line = in_stream.readline()
                    if not line:
                        break
                    word_to_replace = line.split('-')[0].strip()
                    out_stream.write(
                        line.replace(word_to_replace,
                                     dictionary[word_to_replace]))
    except BaseException as ex:
        print("Ошибка чтения или записи файлов", ex)
        return

    print("Новый файл с переводом опубликован по следующему пути\r\n" +
          out_file)
    tools.ask_to_read_file(out_file)

    print("Задение выполнено\r\n")
Exemplo n.º 5
0
    def move(self):
        # This function is called on every turn of a game. It's how your snake decides where to move.
        # Valid moves are "up", "down", "left", or "right".
        # TODO: Use the information in cherrypy.request.json to decide your next move.
        data = cherrypy.request.json

        height = data["board"]["height"]
        width = data["board"]["width"]
        board = [[EMPTY for i in range(height)] for j in range(width)]
        food_list = []

        for food in data["board"]["food"]:
            board[food["x"]][food["y"]] = FOOD
            food_list.append((food["x"], food["y"]))

        for snakes in data["board"]["snakes"]:
            for body in snakes["body"]:
                board[body["x"]][body["y"]] = BODY

        directions = ["up", "down", "left", "right"]
        move = "up"

        myHeadX = data["you"]["body"][0]["x"]
        myHeadY = data["you"]["body"][0]["y"]
        myHead = (myHeadX, myHeadY)
        myHealth = data["you"]["health"]

        grid_on_path = find_food(board, food_list, myHead)
        print(grid_on_path)
        if grid_on_path == None:
            # Avoid walls and bodies, make this def IsWall later
            if myHeadX - 1 < 0 or board[myHeadX - 1][myHeadY] == BODY:
                directions.remove("left")
            if myHeadX + 1 >= width or board[myHeadX + 1][myHeadY] == BODY:
                directions.remove("right")
            if myHeadY - 1 < 0 or board[myHeadX][myHeadY - 1] == BODY:
                directions.remove("up")
            if myHeadY + 1 >= height or board[myHeadX][myHeadY + 1] == BODY:
                directions.remove("down")
            if len(directions) != 0:
                move = random.choice(directions)

        else:
            if get_dir(myHead, grid_on_path) != None:
                move = get_dir(myHead, grid_on_path)
        """
        #Avoid walls and bodies, make this def IsWall later
        if myHeadX - 1 < 0 or board[myHeadX - 1][myHeadY] == BODY:
            directions.remove("left")
        if myHeadX + 1 >= width or board[myHeadX + 1][myHeadY] == BODY:
            directions.remove("right")
        if myHeadY - 1 < 0 or board[myHeadX][myHeadY - 1] == BODY:
            directions.remove("up")
        if myHeadY + 1 >= height or board[myHeadX][myHeadY + 1] == BODY:
            directions.remove("down")

        if len(directions) == 0:
            move = "up"
        else:
            move = random.choice(directions)
        """

        print(f"MOVE: {move}")
        return {"move": move}
Exemplo n.º 6
0
def run():
    """Выполняет задание 6 урока 6"""
    print("\r\nЗадание 6\r\n")

    path = tools.get_dir("lesson5_data")
    if path is None:
        print("Директория с данными не обнаружена. Проверьте, что Вы загрузили все файлы проекта.")
        return

    path = os.path.join(path, "task6_data.txt")
    if not os.path.exists(path) or not os.path.isfile(path):
        print("Файл с данным для этого задания не обнаружен.\r\n" + path +
              "\r\nПроверьте, что Вы загрузили все файлы проекта.")
        return

    organizations = {}
    
    with open(path) as stream:
        while True:
            line = stream.readline()
            if not line:
                break

            parts = line.split()
            if len(parts) != 4:
                print("Неверный размер строки: " + line)
                continue

            name = parts[1] + " \"" + parts[0].replace('_', ' ') + "\""
            revenue = tools.try_float(parts[2])
            costs = tools.try_float(parts[3])

            if revenue is None:
                print("Неверное значение выручки в строке: " + line)
                continue
            if costs is None:
                print("Неверное значение расходов в строке: " + line)
                continue

            profit = round(revenue - costs, 2)
            
            if profit > 0:
                print(name, "работает с прибылью в", str(profit))

            organizations[name] = profit

    avarage_profit = str(round(sum(organizations.values()) / len(organizations), 2))
    print("Среднее значение прибыли (для прибыльных организаций):", avarage_profit)

    object_to_write = (organizations, {"avarage_profit": avarage_profit})
    path = os.path.join(tools.get_dir(), "lesson5_task6.json")

    try:
        with open(path, 'w', encoding='utf8') as stream:
            json.dump(object_to_write, stream, ensure_ascii=False)
    except BaseException as ex:
        print("Провал записи результирующего файла. " + ex)
        return

    print("Результирующий файл выгружен по пути:\r\n" + path)
    tools.ask_to_read_file(path, True)

    print("Задение выполнено\r\n")