In [ ]:
%%html
<style>
.text_cell_render * {
font-family: OfficinaSansCTT;
}
.reveal code {
font-family: OfficinaSansCTT;
}
.text_cell_render h3 {
font-family: OfficinaSansCTT;
}
.reveal section img {
max-height: 500px;
margin-left: auto;
margin-right: auto;
}
</style>
* Почему файлы лучше всего открывать через with?
* Зачем нужен Git?
* Как переместить файл из папки "/some/folder" в папку "/another/dir"?
* Зачем нужен subprocess.PIPE?
* Как вывести JSON-строку "красиво" c отступом в два пробела?
* Как сделать POST-запрос через requests?
In [ ]:
https://py.checkio.org/mission/non-unique-elements/
In [ ]:
from collections import Counter
def checkio(arr):
counts = Counter(arr)
return [
w for w in arr if counts[w] > 1
]
In [ ]:
https://py.checkio.org/mission/absolute-sorting/
In [ ]:
def checkio(nums):
return sorted(nums, key=abs)
In [ ]:
https://py.checkio.org/mission/x-o-referee/
In [ ]:
def checkio(board):
for i in range(3):
if board[i][0] == board[i][1] == board[i][2] != ".":
return board[i][0]
if board[0][i] == board[1][i] == board[2][i] != ".":
return board[0][i]
if board[0][0] == board[1][1] == board[2][2] != ".":
return board[0][0]
if board[0][2] == board[1][1] == board[2][0] != ".":
return board[0][2]
return "D"
In [ ]:
import re
re.match(r"^\+7\d{10}$", "+78005553535").group(0) # проверить, соответствует ли строка целиком
a = "Пишите мне на адрес админ@суперхакер.рф или vasya@superhacker.me! Чмоки!"
re.search(r"\w+@\w+\.\w{2,5}", a).group(0) # найти первое вхождение
re.findall(r"\w+@\w+\.\w{2,5}", a) # найти все вхождения
my_re = re.compile(r"ya_regulyarko") # позволит делать my_re.match(s), my_re.search(s), etc.
# Можно задавать диапазон: r"[A-Za-z]"
In [ ]:
In [ ]:
In [ ]:
b = [
a * 10 for a in range(10)
if a % 2 == 0
]
b
In [ ]:
c = (
a * 10 for a in range(10)
if a % 2 == 0
)
c
In [ ]:
for num in c:
print(num)
In [ ]:
a = [5, 6, 7, 8, 9, 10]
b = [3, 2, 1, 0, -1, -2]
def pow2(num):
return num ** 2
def divisible_by_3(num):
return num % 3 == 0
map(pow2, a) # “лениво” применить funс ко всем элементам списка
zip(a, b) # брать попарно элементы из двух списков
# а что вернет zip(a[::2], a[1::2])?
filter(divisible_by_3, a) # брать только те элементы, для которых func вернет True
In [ ]:
In [ ]:
# короткие безымянные функции
a = [5, 6, 7]
map(lambda num: num ** 2, a)
filter(lambda num: num % 3 == 0, a)
In [ ]:
In [ ]:
In [ ]:
# то же самое, что
# gen_squares = (i * i for i in range(n))
def gen_squares(n):
for i in range(n):
yield i * i
In [ ]:
mygen = gen_squares(5)
In [ ]:
next(mygen)
In [ ]:
def gen(n):
if n <= 1:
return 0
elif n == 2:
return 1
a = 0
b = 1
for _ in range(2, n):
a, b = b, a + b
return b
In [ ]:
In [ ]:
# Минутка "вопросов на собеседовании" - а если через рекурсию?
# Ответ - красиво, но в этом случае так делать нельзя!
def gen2(n):
if n <= 1:
return 0
elif n == 2:
return 1
return gen2(n - 2) + gen2(n - 1)
In [ ]:
In [ ]:
def gen():
a = 0
b = 1
yield a
yield b
while True:
a, b = b, a + b
yield b
In [ ]:
# единственный способ получить значение из генератора - это проитерироваться по нему!
# "[1]" не поможет, но поможет next()
# можно явно привести к листу, но так делать не стоит - все окажется в памяти
a = gen()
for i, num in enumerate(a):
if i == 5:
print(num)
break
In [ ]:
In [ ]:
from collections import Counter
with open("USlocalopendataportals.csv", "r") as testfile:
recs = (l.split(",") for l in testfile)
next(recs) # пропускаем заголовок
owners = (rec[3] for rec in recs)
print(Counter(owners)["Government"])
In [ ]:
def my_function(*args, **kwargs):
print(args)
print(kwargs)
my_function(1, "foo", nick="Mushtandoid", arg=123)
In [ ]:
In [ ]:
def summator(a, b):
return a + b
a = [45, 78]
print(summator(*a))
print(summator(**{"a": 11, "b": 34}))
In [ ]:
In [ ]:
import time
def my_function(a, b):
time.sleep(2)
return a + b
In [ ]:
def timer(func):
def decoy_func(*args, **kwargs):
t = time.time()
res = func(*args, **kwargs)
print("Execution time: {0}".format(time.time() - t))
return res
return decoy_func
In [ ]:
@timer
def my_function(a, b):
time.sleep(2)
return a + b
my_function(5, 6)
In [ ]:
pip install telepot
In [ ]:
import telepot
bot = telepot.Bot('422088359:AAHgC2o92CHWrMfP8pRnsFAFcqy6epY5wuk')
bot.getMe()
In [ ]: