Оптимизировать этот принт до энного простого числа скрипт


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

Я пытаюсь вычислить и отобразить 100000 простых чисел скрипта пауза в течение примерно 6 секунд, пока он не заполняет список простых чисел в списке простых чисел возвращается на консоли в качестве выходного.

Я экспериментировал с использованием

print odd,

для того, чтобы просто печатать, для каждого найденного простого числа, которая быстрее для небольших входов, как n = 1000, а для n = 1000000 списке само печатает намного быстрее (как в оболочку Python и в консоли).

Возможно, весь алгоритм код/должен быть переделан, но сценарий должен оставаться прежней: пользователь вводит количество чисел, которые будут напечатаны (N) и скрипт возвращает все простые числа до простого числа энного.

from time import time
odd = 1
primes = [2]
n = input("Number of prime numbers to print: ")
clock = time()
def isPrime(number):
    global primes
    for i in primes:
        if i*i > number:
            return True
        if number%i is 0:
            return False
while len(primes) < n:
    odd += 2
    if isPrime(odd):
        primes += [odd]
print primes
clock -= time()
print "\n", -clock
raw_input()


Комментарии
2 ответа

Добро пожаловать на программирование и проверку кода!

Ваш код довольно хорошо, особенно для новичка, но я собираюсь быть придирчивым:

from time import time

Я рекомендую положить хотя бы одну пустую строку между импортом и код правильный

odd = 1

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

primes = [2]
n = input("Number of prime numbers to print: ")

А не через вход, я рекомендую использовать тип int(raw_input(. Вход на самом деле интерпретирует текст, введенный как выражение Python, который означает, что он может делать все что угодно. Если вы просто хотели номер, используя int(raw_input лучше. Кроме того, вход был изменен в Python 3, чтобы быть как raw_input.

clock = time()
def isPrime(number):

Обычно функции определяются до фактического код не в середине его.

    global primes

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

    for i in primes:
if i*i > number:

Это не сразу очевидно, почему вы можете остановиться здесь. Комментарий будет полезен.

            return True
if number%i is 0:

Ставить пробелы вокруг операторов: %

            return False
while len(primes) < n:
odd += 2
if isPrime(odd):
primes += [odd]

При добавлении одного элемента в списке простых чисел.добавить(нечетные)

print primes
clock -= time()

Это немного запутанным. Я предлагаю делать значение start_time = .., значение end_time = ..., time_spent = значение end_time - значение start_time. Что способов понять, что вы делаете, а что вы сделали с часами необычно и не немедленно очевидны.

print "\n", -clock
raw_input()

Кроме того, не кладите логики верхнего уровня программы. Поставить все логики, особенно петли внутри функции. Он будет работать быстрее в функции, и позволит сохранить программу аккуратнее.

7
ответ дан 3 августа 2011 в 06:08 Источник Поделиться

Для форматирования кода в Python-это писать так, что у вас есть заголовок/автор комментарии сверху, импорта ниже, классы, функции, а затем основную.

Как правило, это считается плохой прозы кодирования в Python, в основном, потому что он привлекает ненужных ошибок. это сравнивает два объекта в памяти, == сравнивает значения, с последним как то, что кодер обычно означает.

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

я*я могу быть переписано в виде I**2

Кроме этого и того, как Уинстон упомянул, весьма впечатляюще для начинающего. Продолжай!

0
ответ дан 26 февраля 2014 в 03:02 Источник Поделиться