2009-11-17 4 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 
>>> 

Как автоматизировать эту сумму и деление с помощью цикла, возможно?Пример Sum и Division (Python)

Редактировать: Возможно, я не был чист - я хочу, чтобы цикл продолжал делать сумму (кратных 7, например 1-7, 1-14, 1-21 и т. Д.), Пока не достигнет x (x является ввод пользователем)

Хорошо, понял это:

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

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

+0

@Chris: Я удалил свой комментарий на ваш комментарий, поскольку я увидел, что ваш был удален ... нет вашего комментария к моему удаленному ... возможно, некоторая путаница для более поздних историков. –

+0

@craig: Просто начал изучать программирование, но пока не могу конструировать петли. :) – 3zzy

ответ

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

Пример:

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

Уловка очень проста, вы хотите подвести кратные 7,

Чтобы получить -й мультипликатор из 7, это всего лишь i*7

range является функцией питона, чтобы получить список чисел от 0 до x

sum сумм список.

Просто поместите эти кусочки вместе

5

прямой ответ:

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

более эффективный ответ:

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

+1 для математического знания! –

+0

Хотя после некоторого тестирования оказалось, что второе решение имеет некоторые проблемы с переполнением. Например, передача 3800000 приводит к разным результатам между двумя алгоритмами. –

+0

Erm..maybe Я не был ясен: я хочу, чтобы цикл продолжал делать сумму (кратных 7, например 1-7, 1-14, 1-21), если он не достигнет x (x - пользовательский ввод) – 3zzy

0

Я не уверен, что вы хотите, но, возможно, это что-то вроде:

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

Моя версия:

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

слишком «умный», и что это за 'сокращение & lambda' mess?' Sum' уже делает это. – hasen

+0

Я просто попытался показать краткую демонстрацию о том, как можно использовать функциональный подход. Я согласен с тем, что питон в построенной сумме функций делает это легко. :) – aatifh

+1

@neo, лучше и понятнее использовать operator.add вместо лямбда-функции –

0

если я понимаю вашу проблему правильно. Вы хотите иметь возможность принимать пользовательский ввод - x, а затем суммировать значения 1-7, а затем делиться на 7, если qoutient выше, чем x остановить там, в противном случае продолжать суммировать 1-14, делить на 7 и проверить, что коэффициент - и продолжить в кратных 7?

Мой легкий гуманным является

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)