Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Пользователь с клавиатуры вводит путь к файлу.
- После чего создаются три потока. Первый поток заполняет файл случайными числами. Два других потока
- ожидают заполнения. Когда файл заполнен оба потока
- стартуют. Первый поток находит все простые числа, второй поток факториал каждого числа в файле. Результаты
- поиска каждый поток должен записать в новый файл. На
- экран необходимо отобразить статистику выполненных
- операций.
- """
- from threading import Thread, Lock
- from random import randint
- path = input("Введите путь к файлу: ").replace("\"", "")
- lock = Lock()
- def random_numbers(count):
- with lock:
- with open(path, "a", encoding="utf-8") as write_file:
- for i in range(count):
- write_file.write(f"{randint(1, 10)}\n")
- def is_prime(num):
- if num < 2:
- return False
- for i in range(2, int(num**0.5)+1):
- if num % i == 0:
- return False
- return True
- def factorial(num):
- if num == 0:
- return 1
- return factorial(num - 1) * num
- def fact_from_file():
- with lock:
- factorial_numbers = []
- with open(path, "r", encoding="utf-8") as read_file:
- numbers = read_file.read().splitlines()
- for i in numbers:
- factorial_numbers.append(str(factorial(int(i))))
- with open(path[:path.rfind("\\")] + "\\" + "new.txt", "a", encoding="utf-8") as write_file:
- write_file.write(f"\nФакториалы чисел:\n{", ".join(factorial_numbers)}")
- def prime_from_file():
- with lock:
- prime_numbers = set()
- with open(path, "r", encoding="utf-8") as read_file:
- numbers = read_file.read().splitlines()
- for i in numbers:
- if is_prime(int(i)):
- prime_numbers.add(i)
- with open(path[:path.rfind("\\")] + "\\" + "new.txt", "a", encoding="utf-8") as write_file:
- if not prime_numbers:
- write_file.write(f"Простые числа:\nнет")
- else:
- write_file.write(f"Простые числа:\n{", ".join(prime_numbers)}")
- thread1 = Thread(target=random_numbers, args=[10])
- thread2 = Thread(target=prime_from_file)
- thread3 = Thread(target=fact_from_file)
- thread1.start()
- thread1.join()
- thread2.start()
- thread3.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement