styleru.py lecture 2

ilebedev

			styleru.py
		

Сегодня в программе

 

				
matching_movies = []

# explore the database
for movie in db:
	if movie['title'].lower() == title:
		matching_movies.append(movie)

if not matching_movies:
	print("Не удалось найти фильм %s" % title)
	sys.exit(0)
if len(matching_movies) == 1:
	return matching_movies.pop()

# print info about matching movies and select one of them
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))

# get user's choice
choice = 0
while choice < 1 or choice > len(matching_movies):
	try:
		choice = int(input("Введите номер выбранного фильма: "))
	except ValueError:
		pass
				
			

 

				
movies = find_movies_by_title(title)
if len(movies) > 1:
	show_movies_list(movies)
	movie = ask_user_for_movie(movies)
else:
	movie = movies[0]
				
			

 

Теперь нам надо вывести список фильмов в другом месте программы. Как?

 

				
movies = find_movies_by_title(title)
if len(movies) > 1:
	show_movies_list(movies)
	movie = ask_user_for_movie(movies)
else:
	movie = movies[0]
				
			

 

				
matching_movies = []

# explore the database
for movie in db:
	if movie['title'].lower() == title:
		matching_movies.append(movie)

if not matching_movies:
	print("Не удалось найти фильм %s" % title)
	sys.exit(0)
if len(matching_movies) == 1:
	return matching_movies.pop()

# print info about matching movies and select one of them
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))

# get user's choice
choice = 0
while choice < 1 or choice > len(matching_movies):
	try:
		choice = int(input("Введите номер выбранного фильма: "))
	except ValueError:
		pass
				
			

???

				
matching_movies = []

# explore the database
for movie in db:
	if movie['title'].lower() == title:
		matching_movies.append(movie)

if not matching_movies:
	print("Не удалось найти фильм %s" % title)
	sys.exit(0)
if len(matching_movies) == 1:
	return matching_movies.pop()

# print info about matching movies and select one of them
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))

# get user's choice
choice = 0
while choice < 1 or choice > len(matching_movies):
	try:
		choice = int(input("Введите номер выбранного фильма: "))
	except ValueError:
		pass
				
			

???

				
# скрипт поиска фильмов
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))


# скрипт выдачи рекомендаций
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))
				
			

???

				
# скрипт поиска фильмов
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))


# скрипт выдачи рекомендаций
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {} (id: {})".format(
		movie_number + 1,
		movie['release_date'],
		movie['id'])
	)
				
			

???

				
# скрипт поиска фильмов
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))


# скрипт выдачи рекомендаций
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {} (id: {})".format(
		movie_number + 1,
		movie['release_datetime'].date(),
		movie['id'])
	)
				
			

???

				
# скрипт поиска фильмов
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {}".format(movie_number + 1, movie['release_date']))


# скрипт выдачи рекомендаций
print("Найдено несколько фильмов с данным названием. Выберете один: ")
for movie_number, movie in enumerate(matching_movies):
	print ("{} - фильм выпущен {} (id: {})".format(
		movie_number + 1,
		movie['release_datetime'].date(),
		movie['id'])
	)
				
			

И что это всё значит

Но как???

Сверху вниз?

Написать скрипт, который проверяет, нет ли у меня непрочитанных важных писем в почте и выдаёт уведомление.

Сверху вниз?


credentials = load_credentials('config.json')
unread_messages = fetch_emails('melevir@python.ru')
if has_important_messages(unread_messages):
	show_notification(
		text='Посмотри почту, там что-то важное',
		color='red'
	)
			

Сверху вниз?


credentials = load_credentials('config.json')
unread_messages = fetch_emails('melevir@python.ru')
if has_important_messages(unread_messages):
	show_notification(
		text='Посмотри почту, там что-то важное',
		color='red'
	)
			

И что это всё значит

Гигиенический минимум программиста

Сторонние модули

Например


$ pip install vk
		

Например


$ pip install vk
Downloading/unpacking vk
  Downloading vk-1.5.3.tar.gz
  Running setup.py (path:/tmp/.virtualenvs/cabot/build/vk/setup.py) egg_info for package vk

Downloading/unpacking requests (from vk)
  Downloading requests-2.7.0-py2.py3-none-any.whl (470kB): 470kB downloaded
Installing collected packages: vk, requests
  Running setup.py install for vk

Successfully installed vk requests
Cleaning up...
		

Например

			import vk
			 
			api = vk.OAuthAPI(login, password, ...)
			audios = api.audio.get()['items']
			print audios[0]['artist']  # Guns N' Roses
		

Зависимостей много

			 
			vk
			requests
			simplejson
			pytest
			pep8
			...
		

Зависимостей много

			$ cat requirements.txt
			vk
			requests
			simplejson
			pytest
			pep8
			...
		

Зависимостей много

			$ pip install -r requirements.txt
			# pip устанавливает все зависимости из requirements.txt
		

Разные версии пакетов ведут себя по-разному

			# vk версия 1.5
			api = vk.api.APISession(login, password, ...)
			 
			# vk версия 2.0
			api = vk.OAuthAPI(login, password, ...)
		

Зависимости надо замораживать

			$ cat requirements.txt
			vk==2.0-beta
			requests==2.7.0
			simplejson==3.8.0
			pytest==2.6.4
			pep8==1.5.7
			...
		

Зависимости надо замораживать

			$ pip freeze
			vk==2.0-beta
			requests==2.7.0
			simplejson==3.8.0
			pytest==2.6.4
			pep8==1.5.7
			...
		

Сторонние модули

Сказ о ремесле гугления

С чего начать?

Пример

Why should I care?

Что может пойти не так?

Вот это

Как правильно?

Хорошо

Как правильно?

Хорошо

Плохо

Как правильно?

Логическое НЕ (-)

Кавычки ("")

Как правильно?

На что можно не тратить силы

Мне не помогло

Мораль

Подводя итоги