Напечатать сумму чисел от 1 до 200, за исключением мультов от 4 7 в Python


У меня есть вопрос об использовании оператора модуля в Python и будь я использовал его в понятной форме.

Это, как я написал скрипт:

#sum numbers 1 to 200 except mults of 4 or 7
def main():
    sum = 0
    for x in range(200+1):
        if (x % 4 and x % 7): #is this bad???
            sum = sum + x
    print sum


if __name__ == '__main__':
    main()

Итак, мои вопросы:

  • Я должен изложить по модулю более четко? т. е. если x % 4 != 0 и X % 7 != 0
  • Я должен быть приближается к этому совсем по-другому?


593
9
задан 15 февраля 2011 в 10:02 Источник Поделиться
Комментарии
2 ответа

Я думаю, что использование % - это нормально, но это может быть упрощено до:

def main():
print sum([i for i in range(201) if i % 4 and i % 7])

if __name__ == '__main__':
main()

Редактировать: поскольку у меня была ошибка там, это довольно явный признак того, что % - это растяжка. Вместо этого, я бы, наверное, сделать:

def divisible(numerator, denominator):
return numerator % denominator == 0

def main():
print sum(i for i in range(201) if not(divisible(i, 4) or divisible(i, 7)))

8
ответ дан 15 февраля 2011 в 11:02 Источник Поделиться

Моя программа-это кратчайший:

print 12942

Использовать формулу включения-исключения.

Там должны быть 200-(200/4)-(200/7)+(200/28) (используя целочисленное деление) = 200-50-28+7 = 129 выражении в сумме.

Сумма должна быть с(200) - 4*с(200/4) - 7*с(200/7) + 28*С(200/28), где S(Н) = сумма от 1 до н = н*(н+1)/2.

Это значение 0.5* (200*201 - 4*50*51 - 7*28*29 + 28*7*8) = 0.5*(40200 - 10200 - 5684 + 1568) = **12942**.

Зачем писать программу, если вы можете использовать математику?

(Я признаю, что я использовал калькулятор, чтобы умножить и сложить числа)

3
ответ дан 17 февраля 2011 в 05:02 Источник Поделиться