Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas ...
Transcript of Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas ...
![Page 1: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/1.jpg)
Programavimo kalba
Pythonpenktoji paskaita
Marius Gedminas<[email protected]>
http://mg.b4net.lt/python/
2006 ruduo
![Page 2: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/2.jpg)
Programas reikia testuoti
![Page 3: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/3.jpg)
Programą pakeitus reikia
ją testuoti iš naujo
![Page 4: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/4.jpg)
Rankomis kartoti tuos pačius testus
sunku ir nuobodu
![Page 5: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/5.jpg)
Automatizuotas testavimas
![Page 6: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/6.jpg)
$ python test.pyRan 120 tests in 3 seconds.
OK
![Page 7: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/7.jpg)
Kokie būna testai?
![Page 8: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/8.jpg)
Modulių testai
Sistemos testai
![Page 9: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/9.jpg)
Modulių testai:
kiekviena funkcija testuojama
atskirai
![Page 10: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/10.jpg)
Sistemos testai:
testuojama visa programa
![Page 11: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/11.jpg)
import unittest
![Page 12: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/12.jpg)
Funkcija
![Page 13: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/13.jpg)
# fact.py
def fact(n): f = 1 for i in range(n): f *= i return f
![Page 14: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/14.jpg)
Funkcijos testai
![Page 15: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/15.jpg)
class TestFact(unittest.TestCase):
def test(self): self.assertEquals(fact(0), 1) self.assertEquals(fact(1), 1) self.assertEquals(fact(2), 2) self.assertEquals(fact(3), 6) self.assertEquals(fact(4), 24)
![Page 16: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/16.jpg)
Testų rinkinys
![Page 17: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/17.jpg)
import unittestfrom fact import fact
class TestFact(unittest.TestCase): ...
if __name__ == '__main__': unittest.main()
![Page 18: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/18.jpg)
$ python test.pyF====================================FAIL: test (__main__.TestFact)------------------------------------------------------------------Traceback (most recent call last): File "test.py", line 8, in test self.assertEquals(fact(1), 1)AssertionError: 0 != 1
------------------------------------------------------------------Ran 1 test in 0.001s
FAILED (failures=1)
![Page 19: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/19.jpg)
# fact.py
def fact(n): f = 1 for i in range(1, n): f *= i return f
![Page 20: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/20.jpg)
$ python test.pyF====================================FAIL: test (__main__.TestFact)------------------------------------------------------------------Traceback (most recent call last): File "test.py", line 9, in test self.assertEquals(fact(2), 2)AssertionError: 1 != 2
------------------------------------------------------------------Ran 1 test in 0.001s
FAILED (failures=1)
![Page 21: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/21.jpg)
# fact.py
def fact(n): f = 1 for i in range(1, n + 1): f *= i return f
![Page 22: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/22.jpg)
$ python test.py.------------------------------------------------------------------Ran 1 test in 0.001s
OK
![Page 23: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/23.jpg)
Testai pirma
(Test Driven Development)
![Page 24: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/24.jpg)
1. Rašai naują testą
2. Leidi testų rinkini
(naujas testas nepraeina)
3. Rašai kodą, kad testas veiktų
4. Leidi testų rinkinį
(testas praeina)
5. Kartoji
![Page 25: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/25.jpg)
TDD nauda:
testų rinkinys yra pilnas
![Page 26: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/26.jpg)
TDD nauda:
kodas bus toks, kokį lengva naudoti
![Page 27: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/27.jpg)
Realesnis pavyzdys
sprendžiam kvadratines lygtis
![Page 28: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/28.jpg)
1. Įvedimas
2. Sprendimas
3. Išvedimas
![Page 29: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/29.jpg)
2. Sprendimas
![Page 30: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/30.jpg)
# qeq.py
def solve(a, b, c): """Solve ax**2 + bx + c = 0.
Returns a list of solutions. """ raise NotImplementedError
![Page 31: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/31.jpg)
# test.py
class TestSolve(unittest.TestCase):
def test_no_solutions(self): # x**2 + 4 = 0 self.assertEquals( solve(1, 0, 4), [])
![Page 32: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/32.jpg)
$ python test.py
====================================ERROR: test_no_solutions (__main__.TestSolve)------------------------------------------------------------------Traceback (most recent call last): File "test.py", line 10, in test_no_solutions self.assertEquals( File "qeq.py", line 8, in solve raise NotImplementedErrorNotImplementedError
FAILED (errors=1)
![Page 33: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/33.jpg)
# qeq.py
def solve(a, b, c): """Solve ax**2 + bx + c = 0.
Returns a list of solutions. """ return []
![Page 34: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/34.jpg)
$ python test.py
...
Ran 1 test in 0.001s
OK
![Page 35: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/35.jpg)
# test.py
def test_two_solutions(self): # (x - 3)(x + 2) = 0 # x**2 - x - 6 = 0 self.assertEquals( solve(1, -1, -6), [-2, 3])
![Page 36: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/36.jpg)
$ python test.py
====================================ERROR: test_two_solutions (__main__.TestSolve)------------------------------------------------------------------Traceback (most recent call last): File "test2.py", line 18, in test_two_solutions [-2, 3])AssertionError: [] != [-2, 3]
FAILED (failures=1)
![Page 37: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/37.jpg)
# qeq.pyfrom math import sqrtdef solve(a, b, c): d = b ** 2 - 4 * a * c x1 = (-b - sqrt(d)) / (2 * a) x2 = (-b + sqrt(d)) / (2 * a) return [x1, x2]
![Page 38: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/38.jpg)
$ python test.py====================================ERROR: test_no_solutions (__main__.TestSolve)------------------------------------------------------------------Traceback (most recent call last): File "test.py", line 10, in test_no_solutions self.assertEquals( File "qeq.py", line 11, in solve x1 = (-b - sqrt(d)) / (2 * a)ValueError: math domain error
Ran 2 tests in 0.001s
FAILED (errors=1)
![Page 39: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/39.jpg)
# qeq.pyfrom math import sqrtdef solve(a, b, c): d = b ** 2 - 4 * a * c if d < 0: return [] x1 = (-b - sqrt(d)) / (2 * a) x2 = (-b + sqrt(d)) / (2 * a) return [x1, x2]
![Page 40: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/40.jpg)
$ python test.py
...
Ran 2 tests in 0.001s
OK
![Page 41: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/41.jpg)
# test.py
def test_one_solution(self): # (x - 5)**2 = 0 # x**2 - 10x + 25 = 0 self.assertEquals( solve(1, -10, 25), [5])
![Page 42: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/42.jpg)
$ python test.py====================================ERROR: test_one_solution (__main__.TestSolve)------------------------------------------------------------------Traceback (most recent call last): File "test2.py", line 25, in test_one_solution [5])AssertionError: [5.0, 5.0] != [5]
Ran 3 tests in 0.001s
FAILED (failures=1)
![Page 43: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/43.jpg)
# qeq.pydef solve(a, b, c): d = b ** 2 - 4 * a * c if d < 0: return [] x1 = (-b - sqrt(d)) / (2 * a) if d == 0: return [x1] x2 = (-b + sqrt(d)) / (2 * a) return [x1, x2]
![Page 44: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/44.jpg)
$ python test.py
...
Ran 3 tests in 0.001s
OK
![Page 45: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/45.jpg)
1. Įvedimas
![Page 46: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/46.jpg)
# test.py
class TestInput(unittest.TestCase): sampleinput = [ '3, 4, 5', '1, -3, 22', '0.5, -.16, 42.3' ]
![Page 47: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/47.jpg)
# test.py
def test_input(self): self.assertEquals( readInput(self.sampleinput), [(3, 4, 5), (1, -3, 22), (.5, -0.16, 42.3)])
![Page 48: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/48.jpg)
# qeq.py
def readInput(f): """Read input from a file object.
Each line is of the form a, b, c
Returns a list of (a, b, c) tuples. """ raise NotImplementedError
![Page 49: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/49.jpg)
$ python test.py====================================ERROR: test_input (__main__.TestInput)------------------------------------------------------------------Traceback (most recent call last): File "test2.py", line 37, in test_input self.assertEquals( File "qeq.py", line 28, in readInput raise NotImplementedErrorNotImplementedError
Ran 4 tests in 0.001s
FAILED (errors=1)
![Page 50: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/50.jpg)
# qeq.py
import csvdef readInput(f): results = [] for a, b, c in csv.reader(f): results.append((float(a),float(b), float(c))) return results
![Page 51: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/51.jpg)
$ python test.py.------------------------------------------------------------------Ran 4 tests in 0.001s
OK
![Page 52: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/52.jpg)
3. Išvedimas
![Page 53: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/53.jpg)
Praktiškai tas pats.
StringIO modulis naudingas!
![Page 54: Programavimo kalba Python - Gedmin · Programavimo kalba Python penktoji paskaita Marius Gedminas 2006 ruduo](https://reader034.fdocuments.net/reader034/viewer/2022042612/5f573148d116137e9d114fe1/html5/thumbnails/54.jpg)
Jei liko laiko: daugiau pavyzdžių