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")
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")
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")
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")
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}
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")