No exemplo da aula 2, que verifica se um dado número é primo, me parece que podemos melhorar a eficiência do código ao introduzir um break dentro do loop assim que a função já sabe que o número em questão não é primo. Assim, poupamos algumas iterações.
Utilizando o módulo timeit e propositadamente fazendo um teste com um número muito grande (16 dígitos), obtive na minha máquina a seguinte diferença de tempo de computação com e sem o break: 14.74 segundos vs 0.0002 segundos.
Resta saber o que acontece com o tempo de cálculo naqueles casos em que o número é primo. Como nesses casos o break não é utilizado, esperamos que o tempo seja similar ou um pouco pior, dado que acrescentamos uma linha de código. Utilizei o número primo 67.231 e defini 1000 iterações. Não houve diferença significativa no tempo (0.15 segundos em ambos os casos).
Acham a ideia de acrescentar o break em loops válida?
Abraço
Segue o código completo, com e sem o break:
import timeit
mycode = '''
def prime(x):
count=2
sqrx=x**(1/2)
prime=True
while(count<=sqrx):
if x%count==0:
prime=False
break
count=count+1
if(prime):
print(x,"is a prime number")
else:
print(x,"is not a prime number")
prime(67280421310721)
'''
print (timeit.timeit(stmt = mycode, number = 1))
mycode = '''
def prime(x):
count=2
sqrx=x**(1/2)
prime=True
while(count<=sqrx):
if x%count==0:
prime=False
count=count+1
if(prime):
print(x,"is a prime number")
else:
print(x,"is not a prime number")
prime(67280421310721)
'''
print (timeit.timeit(stmt = mycode, number = 1))