# Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 5) ### 1/4/2021 :::danger Η συγκεκριμένη σελίδα μπορεί να χρησιμοποιηθεί για ερωτήσεις στην ώρα του μαθήματος. ::: ## Πρόγραμμα μαθήματος | Ώρα | Θέμα | | --- | ---- | |10:00-10:10| Serialize αντικειμένων με το Pickle [19-pickle.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/19-pickle.ipynb) | |10:10-10:15| Ημερομηνία και ώρα [20-datetime.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/20-datetime.ipynb) | |10:15-10:20| Ψευδοτυχαίες τιμές [21-random.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/21-random.ipynb) | |10:20-10:40| [Άσκηση 1](#Άσκηση-1) & [Άσκηση 2](#Άσκηση-2) | |10:40-11:00| Κανονικές εκφράσεις 1/2 [22-regular_expressions.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/22-regular_expressions.ipynb) | |11:00-11:10| Διάλειμμα | |11:10-11:20| Κανονικές εκφράσεις 2/2 [22-regular_expressions.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/22-regular_expressions.ipynb) | |11:20-11:30| Ανάκτηση δεδομένων από το διαδίκτυο [27-urllib.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/27-urllib.ipynb), [28-requests.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/28-requests.ipynb) | |11:30-11:40| Scraping δεδομένων ιστοσελίδας με το BS4 [29-bs4.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/29-bs4.ipynb)| |11:40-12:00| [Άσκηση 3](#Άσκηση-3) | ### Άσκηση 1 Στο ακόλουθο tweet ο Lex Fridman αναφέρει ότι η αναμενόμενη τιμή του πλήθους τυχαίων επιλογών αριθμών στο διάστημα 0 έως 1 που απαιτούνται έτσι ώστε το άθροισμά τους να ξεπεράσει το 1 είναι ίση με e=2.7182... <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Select numbers between 0 and 1 randomly until sum is &gt; 1.<br><br>The expected # of selections needed is equal to e.</p>&mdash; Lex Fridman (@lexfridman) <a href="https://twitter.com/lexfridman/status/1368948614781935619?ref_src=twsrc%5Etfw">March 8, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Επιβεβαιώστε ότι κάτι τέτοιο ισχύει πραγματοποιώντας πειράματα για: * 100 τρεξίματα * 1.000 τρεξίματα * 10.000 τρεξίματα * 100.000 τρεξίματα * 1.000.000 τρεξίματα * 10.000.000 τρεξίματα ### Άσκηση 2 Το παράδοξο των γενεθλίων είναι ένα γνωστό "παράδοξο" που αναφέρει ότι η πιθανότητα να βρεθούν δύο άτομα που να έχουν γεννηθεί την ίδια ημέρα και μήνα σε ένα πληθυσμό ατόμων είναι μεγαλύτερη από ότι διασθητικά θα περιμέναμε. Για παράδειγμα η πιθανότητα σε έναν πληθυσμό 23 ατόμων να βρεθούν 2 άτομα που να έχουν γεννηθεί την ίδια ημέρα και μήνα είναι 50,7%. Δείτε αναλυτικότερα στο <https://en.wikipedia.org/wiki/Birthday_problem>. Α. Γράψτε ένα πρόγραμμα που να δέχεται έναν αριθμό ατόμων, να τους τοποθετεί τυχαία σε ημερομηνίες του έτους 2020 και στη συνέχεια να εμφανίζει το εάν υπάρχουν δύο άτομα που να έχουν γεννηθεί στην ίδια ημέρα και μήνα. Β. Επαναλάβετε το πείραμα 1.000 φορές και υπολογίστε πειραματικά την πιθανότητα να έχουν τουλάχιστον δύο άτομα την ίδια ημέρα και μήνα γενέθλια για ένα πλήθος ατόμων. Επιβεβαιώστε ότι προσεγγίζουν τις ακόλουθες τιμές (από τη wikipedia). |πλήθος ατόμων | πιθανότητα | |---|----- | |5 | 2.7% | |10 |11.7% | |20 |41.1% | |23 |50.7% | |30 |70.6% | |40 |89.1% | |50 |97.0% | |60 |99.4% | |70 |99.9% | |75 |99.97% | |100|99.99997% | Γ. Καταγράψτε τα αποτελέσματα σε ένα dictionary και αποθηκεύστε τα σε ένα αρχείο με το pickle. ### Άσκηση 3 Πραγματοποιήστε web scraping στη σελίδα <https://www.dit.uoi.gr/members.php>. Εντοπίστε όλα τα ονόματα των μελών του τμήματος Πληροφορικής και Τηλεπικοινωνιών μαζί με τα αντίστοιχα emails και τηλέφωνα και εμφανίστε τα στοιχεία των μελών σε αλφαβητική σειρά ονομάτων. ## Ερωτήσεις και απαντήσεις :::info * Πάντα, κάνετε ερωτήσεις στο κάτω μέρος του εγγράφου, ακριβώς πάνω από εδώ :::