Форум сайта python.su
Написать программу которая в последователньости целых чисел кратных 7 находит их сумму в диапазоне чисел от 6 до 80. числа вводятся с клавиатуры в произвольном порядке от -1000 до 1000, 0 признак окончания ввода
Офлайн
def read_sequence(end=0): sequence = [] while True: el = raw_input('enter integer or {}: '.format(end)) try: i = int(el) if i == end: break sequence.append(i) except ValueError: print 'Error: Input must be integer!' return sequence print sum(filter(lambda a: a % 7 == 0, filter(lambda a: (a >= 6) and (a <= 80), read_sequence())))
Отредактировано s0rg (Апрель 4, 2013 14:01:45)
Офлайн
спасибо
Офлайн
Мой вариант:
end, _sum = 0, 0 # признак окончания ввода, сумма dig = raw_input('data input: ').split() # ввод последовательности for i in dig: # перебор i = int(i) if i == end: break if 6 <= i <= 80 and i % 7 == 0: _sum += i print 'data output: ', _sum
Офлайн
Stesh некоторые любят обходиться без цикла. Тогда ваш вариант будет:
dig = map(int,raw_input('data input: ').split()) # ввод последовательности print 'number of cool values: ',len([i for i in dig if 6 <= i <= 80 and i % 7 == 0])
Офлайн
doza_and, спасибо, интересная конструкция. Только вместо ф-ции len() у нас тут sum(), опечатка.
Только вот не понимаю, для чего выражение
i for i in dig if 6 <= i <= 80 and i % 7 == 0
Офлайн
SteshЧтобы результат вычисления этого выражения стал списком.
берутся в квадратные скобки
Офлайн
Кстати, без промежуточного списка тоже можно:
sum(1 for i in dig if 6 <= i <= 80 and i % 7 == 0)
Офлайн
оно вроде генератор таким образом делает, просто скобки автоматически опускает. Через список побыстрее немножко работает.
Отредактировано sergeek (Апрель 8, 2013 21:18:38)
Офлайн
sergeekЧтобы создать список из генератора, нужно 1) отвести память 2) заполнить ее объектами. Это не то, что немножко быстрее будет, это будет сильно медленнее и ресурсоемко.
оно вроде генератор таким образом делает, просто скобки автоматически опускает. Через список побыстрее немножко работает.
Офлайн