2009-11-17 12 views
2
>>> sum((1, 2, 3, 4, 5, 6, 7)) 
28 
>>> 28/7 
4.0 
>>> sum((1,2,3,4,5,6,7,8,9,10,11,12,13,14)) 
105 
>>> 105/7 
15.0 
>>> 

Comment puis-je automatiser cette somme et cette division à l'aide d'une boucle?Exemple de somme et de division (Python)

Edit: Peut-être que je n'étais pas clair - je veux une boucle pour continuer à faire la somme (de multiples de 7, par exemple 1-7, 1-14, 1-21 etc.) jusqu'à x (x est l'entrée utilisateur)

d'accord, figured it out:

def sum_and_div_of_multiples_of_7(x): 
    y = 7 
    while (y <= x): 
    mof7 = range(1,y) 
    print ('mof7 is', mof7) 

    total = sum(mof7) 
    print ('total =', total) 

    div = total/7 
    print ('div =', int(div), '\n') 

    y = y+7  # increase y 

x = 70 
sum_and_div_of_multiples_of_7(x) 
+1

Il semble un peu tard dans le semestre pour un problème ce facile d'être devoirs, mais il ne semble pas comme un problème réel, que ce soit. –

+0

@Chris: J'ai supprimé mon commentaire sur votre commentaire car j'ai vu le vôtre a été supprimé ... pas encore votre commentaire à mon supprimé ... peut-être une certaine confusion pour les historiens plus tard. –

+0

@craig: J'ai tout juste commencé à apprendre la programmation, mais je ne peux pas encore construire de boucles. :) – 3zzy

Répondre

1
def sumdiv7(limit): 
    for i in range(limit): 
     result = sum(range(i*7))/7 
     print "For", i, ", sumdiv = ", result 

Exemple:

>>> sumdiv7(4) 
For 0 , sumdiv = 0 
For 1 , sumdiv = 3 
For 2 , sumdiv = 13 
For 3 , sumdiv = 30 

L'astuce est très simple, vous voulez résumer les multiples de 7,

Pour obtenir le ième multiple de 7, c'est juste i*7

range est une fonction Python pour obtenir une liste des numéros de 0 à x

sum sommes une liste.

Il suffit de mettre ces pièces ensemble

5

la réponse directe:

def sum_to_number_divided_by_seven(i): 
    return sum(range(i+1))/7 

la réponse plus efficace:

def sum_to_number_divided_by_seven(i): 
    return (i*(i+1))/14 
+0

+1 pour les connaissances en mathématiques! –

+0

Cependant, après quelques tests, il semble que la deuxième solution présente des problèmes de débordement. Passer 3800000, par exemple, produit des résultats différents entre les deux algorithmes. –

+0

Erm..maybe Je n'étais pas clair: je veux une boucle pour continuer à faire la somme (de multiples de 7, par exemple 1-7, 1-14, 1-21) à moins qu'elle n'atteigne x (x est l'entrée de l'utilisateur) – 3zzy

0

Je ne suis pas sûr de ce que vous voulez, mais peut-être est quelque chose comme:

sum(range(x*7+1))/7 
0

Ma version:

def sum_of_nums_divided_by_7(num): 
    return reduce(lambda x, y: x+y, range(num))/7 
+0

trop "intelligent", et qu'est-ce que c'est que "reduce & lambda' mess" 'sum' le fait déjà – hasen

+0

J'ai juste essayé de montrer une brève démonstration sur comment l'approche fonctionnelle pouvait être utilisée. Je suis d'accord que les pythons dans la somme des fonctions construites le font facilement. :) – aatifh

+1

@neo, il est préférable d'utiliser operator.add à la place de la fonction lambda –

0

si je comprends bien votre problème. Vous voulez pouvoir accepter l'entrée de l'utilisateur - x, puis additionner les valeurs 1-7 puis diviser par 7, si le qoutient est supérieur à x arrêter là, sinon continuer à additionner 1-14, diviser par 7 et vérifier ce quotient - et continuer en multiples de 7?

Mon facile sollution est

x = input('user input - enter your value here') 
y = 0 
i = 1 
while(x > y): 
    q = sum(range(1, i*7+1)) 
    y = q/7 
    print y 
    i+=1 

print "userinput: %d" % (x) 
print "iterations: %d" %(i) 
print "end value: %d" %(y)