Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2015 12:25:55

Pythonprogrammer
Зарегистрирован: 2015-01-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Thank you!

Thank you!

Отредактировано Pythonprogrammer (Янв. 21, 2015 07:38:13)

Прикреплённый файлы:
attachment python.txt (3,1 KБ)

Офлайн

#2 Янв. 15, 2015 15:31:31

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Thank you!

data = [13, 29, 37, 49, 29, 7, 25, 5, 50, 2, 18, 0, 14, 16, 14, 4, 6, 14, 2, 5, 41, 27, 10, 11, 33, 6, 7, 47, 35, 35, 48, 0, 38, 1, 41, 15, 26, 46, 4, 23, 5, 32, 45, 37, 2, 33, 20, 30, 46, 20, 10, 14, 44, 25, 3, 27, 6, 22, 9, 20, 18, 43, 5, 33, 27, 41, 38, 20, 6, 2, 18, 29, 34, 40, 41, 8, 44, 30, 21, 10, 6, 1, 12, 0, 22, 28, 47, 4, 5, 1, 11, 21, 1, 44, 24, 42, 42, 41, 14, 24]
1. Вывести уникальные числа (встречаются только один раз)
>>> set(data)
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])
2. Вывести список уникальных чисел <= 40, не встречающиеся в списке
>>> [x for x in range(41) if x not in set(data)]  # числа от 0 до 40 не встречающиеся в списке
[17, 19, 31, 36, 39]
3. Вывести данные в формате
(num1: num1_count),
(num2: num2_count),

numX_count - количество таких цифр в списке. Отсортировать по убыванию num_count
>>> sorted([(x, data.count(x)) for x in set(data)], key=lambda x: x[1], reverse=True)  #
[(5, 5), (6, 5), (14, 5), (41, 5), (1, 4), (2, 4), (20, 4), (0, 3), (4, 3), (10, 3), (18, 3), (27, 3), (29, 3), (33, 3), (44, 3), (7, 2), (11, 2), (21, 2), (22, 2), (24, 2), (25, 2), (30, 2), (35, 2), (37, 2), (38, 2), (42, 2), (46, 2), (47, 2), (3, 1), (8, 1), (9, 1), (12, 1), (13, 1), (15, 1), (16, 1), (23, 1), (26,1), (28, 1), (32, 1), (34, 1), (40, 1), (43, 1), (45, 1), (48, 1), (49, 1), (50, 1)]
4. Рассчитать среднеквадратичное отклонение.
Рецепты смотреть тут
line = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysmNOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewVzKTUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSAHqnLxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIVjXapzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnWetekUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfCvzQWrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbRuXbJrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkmjCCEUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOnLfBtQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGSeuTSkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCfKCuUJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWHuXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxgc'
5. Вывести маленькие символы, которых окружает 1 или более больших символа
def f(line, min_count, near_case, this_case):
    lst = []
    if near_case in ['islower', 'isupper'] and this_case in ['islower', 'isupper']:
        if min_count == 1:
            for i, char in enumerate(line):
                if getattr(char, this_case)():
                    if i != 0 and i != len(line)-1:
                        if getattr(line[i-1], near_case)() or getattr(line[i+1], near_case)():
                            lst.append(char)
                    elif i == 0 and getattr(line[i+1], near_case)():
                        lst.append(char)
                    elif i == len(line)-1 and getattr(line[i-1], near_case)():
                        lst.append(char)
        elif min_count == 2:
            for i, char in enumerate(line):
                if getattr(char, this_case)():
                    if i != 0 and i != len(line)-1:
                        if getattr(line[i-1], near_case)() and getattr(line[i+1], near_case)():
                            lst.append(char)
    return lst
>>> f(line, 1, 'isupper', 'islower')  # маленькие символы, с 1 или 2 большими "соседями"
['t', 'm', 'm', 'q', 'i', 'y', 'h', 'h', 'x', 'q', 'd', 'l', 's', 'k', 'g', 'm', 's', 'v', 'f', 'x', 'a', 'm', 'p', 'u', 'p', 'z', 'f', 'w', 'q', 'r', 'e', 'p', 'l', 'e', 'l', 'w', 'o', 't', 'l', 'f', 's', 'j', 'h', 'w', 'z', 'f', 't', 'y', 'd', 'a', 'p', 'x', 'j', 'g', 'v', 'o', 's', 'v', 'j', 'o', 's', 'f', 'h', 'u', 'w', 'l', 'd', 'k', 'j', 'f', 'q', 'n', 'x', 's', 'u', 'x', 'h', 'j', 'a', 'w', 'o', 'n', 'l', 'n', 'g', 'l', 'p', 'l', 'q', 'x', 'q', 'g', 'd', 's', 'v', 'p', 'f', 'y', 'j', 'a', 'z', 'r', 's', 't', 'c', 'f', 'z', 'm', 'g', 'z', 'v', 'k', 'd', 'a', 'f', 's', 'f', 'c', 'g', 's', 'n', 'n', 'e', 'k', 'u', 'l', 'u', 's', 'z', 'g', 'z', 'k', 'p', 'y', 'z', 'y', 'k', 'k', 'y', 'v', 'j', 'd', 'y', 'f', 'k', 'a', 'b', 'f', 'v', 'z', 'r', 's', 'p', 't', 'q', 'l', 't', 'q', 'c', 'v', 'l', 'z', 'o', 'n', 'w', 'k', 'x', 'q', 'n', 'f', 'w', 'h', 'd', 'b', 'u', 'b', 'r', 'w', 'y', 'x', 'c', 'z', 'j', 'n', 'a', 'k', 'c', 'm', 'j', 'e', 'd', 'v', 'h', 'h', 'q', 'j', 'u', 'r', 'y', 'w', 'k', 'j', 'h', 'o', 'a', 'p', 'a', 's', 'q', 's', 'e', 'x', 'q', 's', 'a', 'c', 's', 's', 'x', 's', 'd', 'i', 'a', 'n', 'f', 't', 'h', 'q', 'p', 'i', 'i', 'c', 'r', 'k', 'p', 'f', 'w', 'v', 'z', 't', 'm', 'l', 'm', 'n', 'i', 'b', 'z', 'k', 'e', 'u', 'k', 'j', 's', 'i', 's', 'n', 't', 'i', 't', 'b', 'u', 'r', 'g', 'i', 'j', 't', 'n', 'j', 'e', 'i', 'l', 'n', 'k', 'f', 'b', 'f', 'u', 'm', 'p', 'k', 'x', 'k', 'r', 'p', 'p', 'e', 'x', 'b', 'v', 'q', 'm', 's', 'y', 'n', 'o', 'x', 'y', 'v', 'h', 'u', 'q', 'j', 'u', 's', 'n', 'f', 'v', 'l', 'h', 'h', 'y', 'w', 'x', 'n', 'q', 's', 'd', 'v', 'y', 'h', 'e', 'p', 'e', 'o', 'i', 'a', 'i', 'g', 's', 'r', 'e', 'o', 'l', 'v', 'n', 'g', 'm', 's', 'e', 'n', 'z', 'd', 'y', 'e', 'y', 'n', 'f', 'j', 'n', 'b', 'o', 'i', 'z', 'w', 'i', 'w', 'l', 'f', 'y', 'm', 'k', 'q', 'w', 'r']
6. Вывести большие буквы, которые окружают две маленькие с каждой стороны.
>>> f(line, 2, 'islower', 'isupper')  # большие символы, с 2 маленькими "соседями"
['M', 'W', 'T', 'K', 'S', 'F', 'M', 'A', 'K', 'P', 'V', 'B', 'X', 'W', 'I', 'U', 'L', 'V', 'L', 'I', 'J', 'M', 'N', 'P', 'J', 'O', 'O', 'X', 'R', 'D', 'O', 'G', 'B', 'W', 'P', 'B', 'L', 'H', 'T', 'B', 'C', 'A', 'C', 'Y', 'L', 'R', 'B', 'K', 'Q', 'S', 'G', 'J', 'R', 'X', 'J', 'A', 'D', 'K', 'S', 'F', 'U', 'H', 'D', 'A', 'Y', 'G', 'F', 'O', 'W', 'O', 'S', 'J', 'C', 'O', 'L', 'B', 'T', 'T', 'A', 'I', 'V', 'Q', 'O', 'Z', 'Z', 'W', 'Z', 'L', 'M', 'F', 'P', 'C', 'F', 'G', 'H', 'W', 'G', 'K', 'Y', 'L', 'O', 'B', 'G', 'A', 'X', 'X', 'Z', 'N', 'H', 'L', 'C', 'U', 'K', 'D', 'X', 'Q', 'Q', 'R', 'H', 'N', 'S']
7. Записать строку в 5 разных файлов (1-й символ в первый, второй во второй и т.д.), имеющих названия ‘file_1’, ‘file_2’ и т.д.
for i in range(1, 6):
    with open(r'c:/file_{}.txt'.format(i), 'w') as fl:
        fl.write(u''.join([x for j, x in enumerate(line, start=1) if j % 5 == i % 5]))
8. Вывести числа от 1 до 100 включительно. Если число делится на 3 то заменить его на Foo. Если делится на 5 то заменить на Bar. Если делится на 3 и на 5 то заменить на FooBar.
def f2(x):
    if x % 3 == 0 and x % 5 == 0:
        return u'FooBar'
    elif x % 5 == 0:
        return u'Bar'
    elif x % 3 == 0:
        return u'Foo'
    else:
        return x
>>> [f2(x) for x in range(1, 101)]
[1, 2, u'Foo', 4, u'Bar', u'Foo', 7, 8, u'Foo', u'Bar', 11, u'Foo', 13, 14, u'FooBar', 16, 17, u'Foo', 19, u'Bar', u'Foo', 22, 23, u'Foo', u'Bar', 26, u'Foo', 28, 29, u'FooBar', 31, 32, u'Foo', 34, u'Bar', u'Foo', 37, 38, u'Foo', u'Bar', 41, u'Foo', 43, 44, u'FooBar', 46, 47, u'Foo', 49, u'Bar', u'Foo', 52, 53, u'Foo', u'Bar', 56, u'Foo', 58, 59, u'FooBar', 61, 62, u'Foo', 64, u'Bar', u'Foo', 67, 68, u'Foo', u'Bar', 71, u'Foo', 73, 74, u'FooBar', 76, 77, u'Foo', 79, u'Bar', u'Foo', 82, 83, u'Foo', u'Bar', 86, u'Foo', 88, 89, u'FooBar', 91, 92, u'Foo', 94, u'Bar', u'Foo', 97, 98, u'Foo', u'Bar']

Офлайн

#3 Янв. 15, 2015 17:04:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Thank you!

botinag
4. Рассчитать среднеквадратичное отклонение.

В одной книжке (Кушниренко-Лебедев) есть дисперсия, а отклонение - корень из неё. Есть также в numpy уже готовая функция (в help'е ищется по deviation).
 >>> def deviat(seq):
...     s0, s1, s2 = 0, 0, 0
...     for i in seq:
...         s2 += i * i
...         s1 += i
...         s0 += 1
...     dis = s2 / s0 - (s1 / s0) ** 2
...     return dis ** 0.5
... 
>>> data = [13, 29, 37, 49, 29, 7, 25, 5, 50, 2, 18, 0, 14, 16, 14, 4, 6, 14, 2, 5, 41, 27, 10, 11, 33, 6, 7, 47, 35, 35, 48, 0, 38, 1, 41, 15, 26, 46, 4, 23, 5, 32, 45, 37, 2, 33, 20, 30, 46, 20, 10, 14, 44, 25, 3, 27, 6, 22, 9, 20, 18, 43, 5, 33, 27, 41, 38, 20, 6, 2, 18, 29, 34, 40, 41, 8, 44, 30, 21, 10, 6, 1, 12, 0, 22, 28, 47, 4, 5, 1, 11, 21, 1, 44, 24, 42, 42, 41, 14, 24]
>>> 
>>> deviat(data)
15.260861705683597
>>> 
>>> import numpy
>>> numpy.std(data)
15.260861705683595
>>>


tags: deviation dispersion



Отредактировано py.user.next (Ноя. 17, 2018 01:38:42)

Офлайн

#4 Янв. 23, 2015 23:03:13

Pythonprogrammer
Зарегистрирован: 2015-01-15
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Thank you!

Мда обида!!

Офлайн

#5 Янв. 29, 2015 19:21:47

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Thank you!

py.user.next
Ух и усложнили

Отредактировано 4kpt_III (Янв. 29, 2015 19:22:26)

Офлайн

#6 Янв. 29, 2015 21:46:39

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Thank you!

py.user.next
мне вот только интересно почему не так

s0, s1, s2 = len(seq), sum(seq), 0



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Янв. 30, 2015 00:26:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Thank you!

terabayt
мне вот только интересно почему не так
Смысл в том, чтобы сделать однопроходный алгоритм, тогда как len и sum - это дополнительные проходы.



Офлайн

#8 Янв. 30, 2015 08:09:05

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Thank you!

py.user.next
Смысл в том, чтобы сделать однопроходный алгоритм, тогда как len и sum - это дополнительные проходы.
спасибо, сам как-то об этом и не подумал



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version