Εργαστήριο 2 στην Python
Θέματα που εξετάζονται στο εργαστήριο: συγγραφή συναρτήσεων1, unit tests με τη στάνταρντ βιβλιοθήκη unittest2, comprehensions34, virtual environments (venv), εξωτερικές βιβλιοθήκες και εγκατάσταση με το pip, unit tests με το pytest5.
Εξάσκηση (εκφωνήσεις και λύσεις ασκήσεων)
Άσκηση E2A1 - Γράψτε μια συνάρτηση που να δέχεται δύο λεκτικά και να επιστρέφει την απόσταση Hamming (δηλαδή το πλήθος των αντίστοιχων χαρακτήρων που διαφέρουν στα δύο λεκτικά). Αν τα λεκτικά είναι διαφορετικού μήκους η συνάρτηση να επιστρέφει την τιμή -1. Τροποποιήστε το ακόλουθο template κώδικα έτσι ώστε η λύση σας να επιτυγχάνει σε όλα τα unit tests.
Λύση άσκησης 1
Άσκηση E2A2 - Γράψτε μια συνάρτηση που να ελέγχει αν μια φράση είναι παντόγραμμα, δηλαδή περιλαμβάνει και τα 24 γράμματα του Ελληνικού αλφαβήτου. Τροποποιήστε το ακόλουθο template κώδικα έτσι ώστε η λύση σας να επιτυγχάνει σε όλα τα unit tests.
Λύση άσκησης 2
Άσκηση E2A3 - Γράψτε μια συνάρτηση που να δέχεται ένα κείμενο, να αφαιρεί τα σύμβολα τελεία και κόμμα, να εντοπίζει το μεγαλύτερο μήκος λέξης που περιέχει και να επιστρέφει μια λίστα με όλες τις λέξεις του κειμένου με μήκος ίσο με το μεγαλύτερο μήκος, ταξινομημένες σε αύξουσα σειρά. Τροποποιήστε το ακόλουθο template κώδικα έτσι ώστε η λύση σας να επιτυγχάνει σε όλα τα unit tests.
Λύση άσκησης 3
Άσκηση E2A4 - Για την ακόλουθη λίστα τιμών 56, 37, 771, 90, 16, 11 γράψτε comprehensions που να κάνουν τα ακόλουθα:
- Να δημιουργεί νέα λίστα με το πλήθος των ψηφίων κάθε τιμής.
- Να δημιουργεί νέα λίστα με τα ψηφία κάθε τιμής σε αντίστροφη σειρά.
- Να δημιουργεί νέα λίστα μόνο με τις τιμές που είναι μεγαλύτερες από το μέσο όρο των τιμών.
- Να δημιουργεί νέα λίστα με ζεύγη τιμών που το πρώτο στοιχείο κάθε ζεύγους να είναι η ίδια τιμή και δεύτερο στοιχείο μια λογική τιμή με τιμή True αν η τιμή είναι άρτια αλλιώς η τιμή False.
Τροποποιήστε το ακόλουθο template κώδικα έτσι ώστε η λύση σας να επιτυγχάνει σε όλα τα unit tests.
Λύση άσκησης 4
Επιπλέον εξάσκηση
Άσκηση E2A5 Σε έναν φάκελο στην επιφάνεια εργασίας με όνομα e2a5
, από τη γραμμή εντολών δημιουργήστε ένα virtual environment με όνομα myenv
και ενεργοποιήστε το με τις ακόλουθες εντολές σε Windows:
ή με τις ακόλουθες εντολές σε Linux ή MacOS:
Εγκαταστήστε στο myenv
με το pip
τη βιβλιοθήκη Faker.
Δημιουργήστε στοιχεία (όνομα, διεύθυνση, ημερομηνία γέννησης) για 100 υποθετικά άτομα ηλικιών από 18 έως 90 ετών και αποθηκεύστε τα σε ένα αρχείο με όνομα fake100.txt
με ελληνικά ερωτηματικά (;) ως διαχωριστικά των στοιχείων κάθε ατόμου. Συμβουλευτείτε την τεκμηρίωση της βιβλιοθήκης για τις συναρτήσεις που πρέπει να καλέσετε. Φροντίστε έτσι ώστε η εκτέλεση του κώδικα να δίνει κάθε φορά τις ίδιες τιμές.
Ακολουθεί ένα απόσπασμα τυχαίων τιμών που μπορεί να δημιουργούνται:
Allison Hill;819 Johnson Course, East William, AK 74064;1947-09-15
Kimberly Robinson;65423 Garcia Light, West Melanieview, AS 06196;1986-06-17
Valerie Gray;310 Kendra Common Apt. 164, Reidstad, GA 49021;1959-02-15
Mia Sutton;327 Nelson Route, Lake Mark, WI 07832;1949-11-29
Λύση άσκησης 5
Allison Hill;819 Johnson Course, East William, AK 74064;1947-09-15
Kimberly Robinson;65423 Garcia Light, West Melanieview, AS 06196;1986-06-17
Valerie Gray;310 Kendra Common Apt. 164, Reidstad, GA 49021;1959-02-15
Mia Sutton;327 Nelson Route, Lake Mark, WI 07832;1949-11-29
Ethan Adams;76724 John Points Suite 969, Coxberg, NY 65187;1939-10-29
Brian Burton;166 Rice Plaza Apt. 184, Danielchester, GA 59971;1933-06-05
Michelle Stanton;489 Eric Track, New Stephanie, NC 00575;1976-11-29
Brian Cox DVM;39117 Tiffany Place, East Donna, OH 22144;1952-07-16
Jenny Lewis;465 Lam Mission, East Jeffreymouth, AK 77611;1973-08-17
Adrienne Zimmerman;51834 Lewis Curve, Sanchezfort, AS 53855;1947-02-02
Jeffrey Henderson;106 Mcbride Coves, East James, NV 18874;1963-12-27
David Leblanc;80132 Tucker Forest, Barreraburgh, MS 00783;2005-02-12
Richard Gibson;34309 Julie Centers Apt. 978, North Susan, CO 24857;1938-03-11
Scott Powell;USNS Riley, FPO AE 81684;1939-03-05
Krystal Stewart;46247 Hickman Cliffs Apt. 799, North Amandahaven, KS 17862;2001-04-26
Sherry Wood;808 Huynh Cove Apt. 411, West Juan, IL 94559;1958-03-22
Sarah Wagner;64005 Dana Greens, Lake Scott, VT 56558;1974-02-19
Tony Vazquez;9826 Bobby Lakes, West Jasonbury, TN 13974;1959-01-04
Shelly Dickson;26025 Pham Way, West Erik, UT 14669;1961-02-11
John Gonzalez;PSC 5433, Box 0365, APO AA 09600;2003-10-10
Martin Ross;Unit 8501 Box 4294, DPO AE 14709;1976-09-27
Richard Graham;Unit 1693 Box 4060, DPO AP 71076;1983-05-01
Nancy Gonzalez;514 Estrada Islands Suite 482, South Elizabeth, MS 89278;1987-10-21
Keith Sullivan;3699 Marshall Mills Apt. 872, West Zacharymouth, CO 98954;1950-05-03
Robert Hernandez;176 Jennifer Lights Suite 632, Port Michelleville, WI 56225;1949-03-01
Melissa Marshall;2788 Dodson Mills, Rivasside, NV 21362;1987-06-24
David Wright;347 Jennifer Freeway Suite 558, East Edwardfurt, UT 20529;1984-10-04
Jason Daniels;6909 Woods Knoll, Karenchester, ND 98479;1986-10-26
Stephanie Freeman;65627 Tina Place Apt. 699, North Dawnberg, VI 61016;1946-06-16
Garrett Gibson;6417 Kaitlyn Center Suite 310, East Jamestown, RI 20474;1950-08-09
Brian Gould;2991 Tami Coves Apt. 496, Davidborough, CA 78108;1983-08-09
Ashley Barton;058 Stanley Cliff, Alexanderchester, GU 64752;1940-11-22
Madison Poole;84987 Graham Street Suite 531, Nicolebury, WV 61411;1974-10-15
Gabrielle Snyder;54549 Peters Path Apt. 136, Petersbury, UT 62903;1980-05-04
Ricky Davis II;957 Coleman Summit Suite 574, Johnville, VA 25743;1956-03-23
Tiffany Vaughn;9894 Marissa Hill Apt. 524, Lake Amandaview, AZ 07647;1973-08-02
Beth Oneill;477 Peterson Center, Shelleyfort, DE 09065;1962-06-11
Mark Brown;31869 Kimberly Light Suite 749, Torreston, RI 97505;1940-06-07
Lori Baker;81206 Norris Mountains, Antonioport, VT 37557;1984-07-04
Michael Bradshaw;1832 Serrano Cliffs, East Laurashire, PW 38329;1965-04-01
Eric Powell;1906 Munoz Burg Apt. 399, Port Emilyview, OK 05774;1988-11-23
Joseph Ramos;717 Ortiz Islands Apt. 256, Robertsfurt, GU 72603;1935-11-14
David Wilson;876 Jacob Lake, Garrettton, IL 35504;1973-04-13
Jessica Wolfe;248 Andrea Course, Port Robin, NH 15897;1980-06-21
Timothy Carter;7378 Patrick Rapid Apt. 146, Sarahhaven, KY 00837;1953-11-02
Kevin Duarte;8755 Gibson Islands, Lake John, MS 31114;1995-09-05
Evan Kennedy;PSC 6627, Box 0289, APO AA 13655;1997-01-02
Joseph Bryant;217 Morgan Square Suite 158, Finleyfort, VI 71413;1935-10-24
Mark Mccall;Unit 1611 Box 7240, DPO AE 43017;1991-04-23
James Thomas;21969 Tyler Prairie, East Steven, KS 60737;1951-10-30
Robert Santana;75946 Bryant Hollow, South Melissa, CT 31592;1961-01-11
Edward Lyons;0909 Wall Heights Apt. 953, New John, WV 94994;1989-03-20
Breanna Davis;7095 Christopher Hill, Julieburgh, ID 17823;1990-08-09
Holly Shaw;7451 Mccarty Divide, Port Erica, TX 52590;2003-10-20
Holly Gibbs;5496 Rodriguez Fort, Johnsonside, MD 80465;1949-05-08
Rodney Blankenship;20047 Colton Plain Apt. 675, Matthewsberg, FM 54880;1980-12-31
Lisa Crosby;77351 Stephens Rue Suite 064, North Stacy, GU 60101;1939-11-19
Mark Maddox;29318 Brenda Via Apt. 529, West Micheleberg, DC 71308;1951-06-28
Matthew Johnson;502 Williams Streets, Foxland, NJ 59257;1989-12-26
Ashley Gordon;USS Acosta, FPO AP 68848;1955-03-18
Amanda Lutz;177 Rachel Islands Apt. 124, Oscarhaven, LA 59970;1970-02-04
Ricky Wilson;7365 Ross Stream, West Ronaldview, MN 20507;1983-04-30
Brandon Miller;80988 Santiago Loop Suite 604, Michaelshire, NY 28385;1944-06-26
Dr. Gregory Hawkins;368 Chelsea Shoals Suite 024, Sandrastad, AL 24278;1996-09-09
Jennifer Thomas;83667 Moore Inlet, Kimberlyshire, PA 11636;1997-09-03
Paul Williams;679 Perry Forge Apt. 561, Erikashire, NM 69567;1981-11-21
James Greene;24451 Tyler Meadows Apt. 268, New Angelica, TN 46922;1938-06-14
Amanda Smith;PSC 5969, Box 6641, APO AA 03234;2003-09-21
Travis Stevens;61369 Warren Locks Suite 535, North William, DE 70048;1970-06-01
Hannah Luna;12432 Kathleen Shoal, East Stephaniefort, NH 99387;1974-05-05
Melanie Macias;527 Taylor Roads Suite 490, Williamport, NH 59734;1935-12-08
Dustin Newman;Unit 1998 Box 6798, DPO AP 05877;1966-01-08
Marissa Morris;71518 Benjamin Station, Ritterhaven, NC 80429;1944-10-11
Douglas Ortiz;515 Angela Lights, Johnathanberg, MA 11183;1975-09-24
Gregory Ponce;91486 Li Skyway Apt. 685, West Kyleborough, MA 64237;1947-03-17
Mrs. Elizabeth French DDS;592 Moore Falls, Lake Samuel, MT 48250;1982-07-25
Jeremy Mitchell;83473 Gregory Ports Suite 746, Burchborough, AS 79755;1943-04-18
Martin Sawyer;814 Kathryn Groves, Whiteheadberg, MP 57841;1939-11-20
Ruth Wilkerson;USCGC Brown, FPO AP 49516;1950-05-27
Jade Johnson DVM;20472 West Avenue Apt. 043, New Shelby, PA 69677;1964-02-02
Cynthia Martinez;17980 Jennifer Highway Suite 095, New Robert, TN 88085;1939-06-10
Andrea Fox;7065 Burgess Knolls, West Johnville, WI 76772;1986-11-10
Andrew Payne;772 Bryan Trail, Johnsonborough, AZ 26645;1997-11-07
Eric Sanders;0345 Michelle Isle Suite 156, Paulfurt, MA 24987;1969-05-31
Tim Stone PhD;9284 Garcia Islands, Kirkchester, GA 90909;1965-08-05
Nicholas Buck;0165 Stephanie Divide Suite 021, Port Deanna, MN 50682;2002-07-02
Christian Cole;92856 Banks Gateway Apt. 027, Mcintyreville, KS 34617;1984-08-01
Logan Benson;Unit 3121 Box 7271, DPO AP 42390;1981-12-10
Krista Roberts;258 David Flats, East Kristy, AK 47804;1973-08-19
Robert Arnold;46786 Morrow Cliffs, West Dawn, NV 61558;1982-11-02
Shawn Deleon;68018 Kevin Estates, Sarahbury, MI 68513;1998-07-09
Danielle Reid;498 Wayne Extension, East Donna, VA 79817;1957-11-01
Amanda Shields;396 Tyler Road Suite 473, Evansland, UT 08353;1944-09-23
John Peterson;562 Robertson Coves Suite 371, Shannonberg, CT 07133;1954-05-17
Luis Wright;9532 Ferrell Mountain, Kochfort, AK 12303;2002-03-11
Tracy Lewis;7974 Melanie Meadows, West Jessica, WV 53356;1959-11-26
Kelly Lee;8784 David Court, Brooksmouth, OH 48421;1988-04-20
Jordan Porter;578 Hernandez Passage, West Sarah, MD 21800;1961-11-16
Sarah Wheeler;947 Micheal Spring Apt. 694, New Thomasshire, OK 30325;1985-11-07
Carolyn Fuller;30913 Scott Manor Apt. 636, Salaston, VT 18599;1971-01-20
Άσκηση E2A6 Μια άλλη βιβλιοθήκη για unit tests είναι η εξωτερική βιβλιοθήκη pytest. Επιλύστε ξανά την άσκηση Ε2Α1 χρησιμοποιώντας αυτή τη φορά την pytest για τους ελέγχους.
Λύση άσκησης 6
Πρώτα θα πρέπει να εγκατασταθεί η βιβλιοθήκη pytest.
Ο κώδικας που πραγματοποιεί τους ελέγχους με το pytest ακολουθεί:
$ python e2a6_test.py
============================ test session starts =============================
platform darwin -- Python 3.10.12, pytest-8.1.1, pluggy-1.4.0
rootdir: XXX/src/python/lab2
plugins: Faker-24.1.0
collected 1 item
e2a6_test.py . [100%]
============================= 1 passed in 0.02s ==============================
test_
ή να τελειώνει με _test.py
. Επίσης, τα ονόματα των συναρτήσεων με τους ελέγχους πρέπει να ξεκινούν με test_
ή η κλάση που περιέχει ως μεθόδους τους ελέγχους να έχει όνομα που να ξεκινά με Test
.