bmstu.py lecture 3

aori.ru

			bmstu.py
		

План лекции

float

			>>> 0.1 + 0.2 == 0.3
			False
		

float

			>>> 0.1 + 0.2
			0.30000000000000004
		

Big O notation

Big O notation

"Анализ алгоритмов. Активный обучающий подход"

list и tuple

dict

set

Это важно

Потому что:

Тестирование

Тестирование

Тестирование

Тестирование

Автоматические тесты

Автоматические тесты

Автоматические тесты (google)

см. "Как тестируют в Google", ссылка на книгу есть в материалах.

Автоматические тесты (google)

Автоматические тесты (google)

Тестирование в Python

Батарейки для тестирования:

Тестирование в Python

Батарейки для тестирования:

Пример

# validators.py
def is_valid_email(email):
    return '@' in email
		

Пример

# validators.py
def is_valid_email(email):
    return '@' in email

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

Пример

# tests.py
import unittest
from validators import is_valid_email
class EmailValidatorTestCase(unitttest.TestCase):
	def test_validates_valid_email(self):
		actual_result = is_valid_email('valid.email@gmail.com')
		self.assertTrue(actual_result)
	def test_invalidates_invalid_email(self):
		actual_result = is_valid_email('invalid.email')
		self.assertFalse(actual_result)
		

assert* в unittest

assertEqual(a, b)		assertIsNone(x)
assertNotEqual(a, b)	assertIsNotNone(x)
assertTrue(x)    		assertIn(a, b)
assertFalse(x)  		assertNotIn(a, b)
assertIs(a, b) 			assertIsInstance(a, b)
assertIsNot(a, b)		assertNotIsInstance(a, b)

assert* в unittest

assertEqual(a, b)		assertIsNone(x)
assertNotEqual(a, b)	assertIsNotNone(x)
assertTrue(x)    		assertIn(a, b)
assertFalse(x)  		assertNotIn(a, b)
assertIs(a, b) 			assertIsInstance(a, b)
assertIsNot(a, b)		assertNotIsInstance(a, b)
https://docs.python.org/2/library/unittest.html

Каким должен быть маленький тест

Покрытие тестами

Зачем это всё?

История одной курсовой работы

История другой курсовой работы

Системы контроля версий

git

git

https://git-scm.com/book/ru/v2

git - набор неофита

git - набор неофита

Да, работа с ветками не входит в набор неофита.

Где хранить репозитории

virtualenv

virtualenv


$ mkdir challenges2_venv
$ virtualenv challenges2_venv
...
$ source challenges2_venv/bin/activate
# pip теперь использует не глобальную папку
# для установки пакетов, а challenges2_venv
        

Практикум

Требования к ДЗ

Экзамен

Квадратное уравнение

Частотный анализ

Твиты

twits = [{'id': 1,
            'msg': 'It occurs to me that I've never given a "considered harmful" talk.',
            'response_to': None,  # тут id твита, на который отвечает данный твит
            'timestamp': '2015-10-14T18:33:82'}, ...]

Вывести твиты так, чтобы ответы к твиту были вложенными к нему. Ответы должны быть отсортированы по времени.

It occurs to me that I've never given a "considered harmful" talk.
    @dabeaz "Self-immolation is considered harmful."
    @dabeaz "Considered Harmful" talks considered harmful?
       @f1xedgear  @dabeaz "David Beazley talks considered harmful"
    @dabeaz "David Beazley talks considered harmful"
One slot open in my Advanced Python course. Nov 16-20. Chicago.