Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2013 12:07:23

nightvi
Зарегистрирован: 2013-03-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

Написать программу которая в последователньости целых чисел кратных 7 находит их сумму в диапазоне чисел от 6 до 80. числа вводятся с клавиатуры в произвольном порядке от -1000 до 1000, 0 признак окончания ввода

Офлайн

#2 Апрель 4, 2013 13:46:51

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

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)

Офлайн

#3 Апрель 4, 2013 16:55:15

nightvi
Зарегистрирован: 2013-03-12
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

спасибо

Офлайн

#4 Апрель 6, 2013 23:01:38

Stesh
Зарегистрирован: 2013-03-30
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

Мой вариант:

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

Офлайн

#5 Апрель 7, 2013 14:11:41

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

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])
Признак окончания ввода похоже не нужен.



Офлайн

#6 Апрель 8, 2013 17:31:16

Stesh
Зарегистрирован: 2013-03-30
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

doza_and, спасибо, интересная конструкция. Только вместо ф-ции len() у нас тут sum(), опечатка.
Только вот не понимаю, для чего выражение

i for i in dig if 6 <= i <= 80 and i % 7 == 0
берутся в квадратные скобки().

Офлайн

#7 Апрель 8, 2013 17:56:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

Stesh
берутся в квадратные скобки
Чтобы результат вычисления этого выражения стал списком.



Офлайн

#8 Апрель 8, 2013 18:51:35

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

Кстати, без промежуточного списка тоже можно:

sum(1 for i in dig if 6 <= i <= 80 and i % 7 == 0)

Офлайн

#9 Апрель 8, 2013 21:18:05

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

оно вроде генератор таким образом делает, просто скобки автоматически опускает. Через список побыстрее немножко работает.

Отредактировано sergeek (Апрель 8, 2013 21:18:38)

Офлайн

#10 Апрель 11, 2013 14:06:48

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Вроде бы простенькая задачка, но не знаю как решить

sergeek
оно вроде генератор таким образом делает, просто скобки автоматически опускает. Через список побыстрее немножко работает.
Чтобы создать список из генератора, нужно 1) отвести память 2) заполнить ее объектами. Это не то, что немножко быстрее будет, это будет сильно медленнее и ресурсоемко.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version