L'autre jour, j'ai halo à python
, alors je suis retourné au début et j'ai fait quelque chose comme un exercice de base
J'ai essayé de faire quelque chose comme "la moyenne de la somme de 1 à 10"
Introduction de la solution à ce moment-là
# -*- coding: utf-8 -*-
def normal_average(start, end):
#0 pour être flottant lors du calcul de la moyenne.Initialisation à 0
sum = 0.0
size = end - start + 1
for i in range(start, end + 1):
sum += i
else:
print "normal_average = %f"%(sum/size)
start = 1
end = 10
normal_average(start, end)
résultat normal_average = 5.500000
Il y a un sentiment que la partie + 1
n'est pas bonne, mais ça va
python
Je suis un débutant, donc les mauvaises choses sont mignonnes
def another_average(start, end):
print "another_average = %f"%((start + end)/2.0)
start = 1
end = 10
another_average(start, end)
résultat another_average = 5.500000
Je pensais que la moyenne de la somme des entiers consécutifs ne devrait pas être une boucle sans la tourner, alors je l'ai écrite. Je me demande si cette façon de résoudre est aussi une fourmi Cela devrait faire une différence dans la vitesse de traitement à mesure que le nombre augmente.
Plus le nombre est grand, plus la différence est grande, donc cette fois je vais essayer de trouver la moyenne des sommes de «1 à 100 millions».
# -*- coding: utf-8 -*-
import time
def normal_average(start, end):
sum = 0.0
size = end - start + 1
for i in range(start, end + 1):
sum += i
else:
print "normal_average = %f"%(sum/size)
def another_average(start, end):
print "another_average = %f"%((start + end)/2.0)
#Exécutif principal
start = 1
end = 100000000
#Mesure du temps d'exécution
normal_start_time = time.time()
normal_average(start, end)
normal_end_time = time.time()
print "execute time is %f"%(normal_end_time - normal_start_time)
print
another_start_time = time.time()
another_average(start, end)
another_end_time = time.time()
print "execute time is %f"%(another_end_time - another_start_time)
résultat normal_average = 50000000.500000 execute time is 12.961456 another_average = 50000000.500000 execute time is 0.000006
(N'est-ce pas écrasant? Notre armée ...!) De toute évidence, la vitesse de traitement est différente.
On dit que si vous changez la logique en premier lieu, vous pouvez obtenir des résultats extrêmement rapides. Bien entendu, cette solution n'est pas sans problèmes, mais au moins elle est nécessaire plus rapidement que le bouclage pour obtenir la "moyenne de la somme des entiers consécutifs". C'était une leçon qu'il était important de changer de point de vue et de résoudre le problème.
Recommended Posts