хочу оптимизировать код "генератора телефонных номеров" с помощью вывода цикла - PullRequest
1 голос
/ 22 сентября 2019

Описание программы:

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

2.созданиетекстовые файлы, основанные на диапазоне, который вы передаете ему, я имею в виду: если вам нужно 100 текстовых файлов, содержащих 100 уникальных телефонных номеров, либо уникальных по сравнению с каждым номером внутри, либо другим, которые должны быть сделаны в будущих текстовых файлах.

тем временем он создает телефонные номера, сортирует телефонные номера, как показано ниже, если это имеет смысл:

Этот формат следует ожидать в текстовых файлах:

    • 1909911304
    • 1987237347

........... и так далее .............

Ответственный за это метод:

( Примечание: я использую метод make_numbers какконструкция операции, на самом деле следует использовать num_doc_amount. )

    def make_numbers(self):
        """dont use this method:this method supports num_doc_amount method"""
        # sorry for this amount of loops it was inevitable to make the code work
        for number_of_files in range(self.amount_numbs):
            # this loop maintains the pi_digits.txt making(txt)
            number_of_files += 1
            if number_of_files == self.amount_files:
                sys.exit()
            for phone_numbers in range(self.amount_numbs):
                # This loop maintains the amount of phone numbers in each pi_digits.txt
                file = open(f"{self.directory}\\{number_of_files}.{self.format}", 'w')
                for numbers in range(self.amount_numbs):
                    # This loop is parallel to the previous one and
                    # writes that each number is which one from the
                    # whole amount of numbers
                    file.write(f"{numbers + 1}. - {self.first_fourz}{choice(nums)}"
                               f"{choice(nums)}{choice(nums)}{choice(nums)}"
                               f"{choice(nums)}{choice(nums)}{choice(nums)}\n")

    def num_doc_amount(self):
        """first make an instance and then you can use this method."""
        os.mkdir(f"{self.directory}")  # makes the folder
        for num_of_txt_files in range(self.amount_files):
            # This loop is for number of text files.
            num_of_txt_files += 1
            self.make_numbers()

Обратите внимание:

1. Единственная проблема, с которой я столкнулся,Параллельные циклы идут друг с другом, я не знаю, смогу ли я упростить код (пожалуйста, дайте мне знать, можно ли его упростить).

2. Код работаети не имеет ошибок.

, если есть какой-либо способ упростить этот код, пожалуйста, помогите мне. Спасибо.

1 Ответ

1 голос
/ 27 сентября 2019

1. Единственная проблема, с которой я сталкиваюсь - это параллельные циклы, идущие друг с другом, я не знаю, смогу ли я упростить код (пожалуйста, дайте мне знать, можно ли его упростить).

Даже если это не единственная проблема , в приведенном выше коде слишком много циклов.Требуется не более двух: один цикл над файлами, один цикл над числами;см. ниже.

2.Код работает и не содержит ошибок.

Это неверно, поскольку вы хотите, чтобы все номера телефонов были уникальными ,Как уже было сказано, в коде не предусмотрено, что написанные телефонные номера являются уникальными.Для этого проще всего с самого начала сгенерировать все уникальные числа.

    def num_doc_amount(self):
        """first make an instance and then you can use this method."""
        os.mkdir(self.directory)    # makes the folder
        un = sample(range(10**7), self.amount_files*self.amount_numbs)  # all the unique numbers
        # This loop is for number of text files:
        for num_of_txt_file in range(self.amount_files):
            with open("%s/%s.%s"%(self.directory, 1+num_of_txt_file, self.format), 'w') as file:
                # This loop maintains the amount of phone numbers in each .txt:
                for number in range(self.amount_numbs):
                    # writes one number from the whole amount of numbers
                    file.write("%s. - %s%07d\n" %(1+number, self.first_fourz, un.pop()))

...