Στην άσκηση αυτή θα συμπληρώσετε τον κώδικα Python που βρίσκεται στο αρχείo hw3.py ακολουθώντας τις ίδιες οδηγίες (δείτε και εδώ) με αυτές που δόθηκαν στη Σειρά Ασκήσεων 1.(Αυτόματοι έλεγχοι ορθότητας βρίσκονται στο hw3_tests.txt.)
Θα παραδώσετε το αρχείο hw3.py.
Θα πρέπει να υλοποιήσετε ένα σύνθετο τύπο δεδομένου (όπως ο ritos στη Διάλεξη 6) που αναπαριστά μια "γεωγραφική τοποθεσία", συμπληρώνοντας τον κώδικα στα κενά _________ του κατασκευαστή (constructor) location και των συναρτήσεων επιλογής (selectors) name, longitude, lattitude, type.
Η κλήση στον κατασκευαστή location(name, lat, lon, type) πρέπει να επιστρέφει το σύνθετο δεδομένο τοποθεσίας με τοπωνύμιο name, το οποίο βρίσκεται στο γεωγραφικό πλάτος και μήκος lat και lon αντίστοιχα, και το είδος της τοποθεσίας δίνεται στη συμβολοσειρά (str) type, πχ., 'monument' (μνημείο), 'park' (πάρκο).
Συμπληρώστε τα κενά των συναρτήσεων επιλογής του δεδομένου location, δηλαδή στις συναρτήσεις name, longitude, latitude και type, έτσι ώστε για μια τοποθεσία loc (δηλ., δεδομένο location):
def location(name, lat, lon, type): |
Συμπληρώστε τον κώδικα ή τα κενά _________ στις συναρτήσεις distance, print_location και nearest_location, έτσι ώστε να δίνουν τα επιθυμητά αποτελέσματα, χωρίς όμως να κάνετε χρήση της αναπαράστασης των δεδομένων location που βρίσκεται εσωτερικά στον κώδικα κατασκευαστή και συναρτήσεων επιλογής στην Άσκηση 1. Ο κώδικας των συναρτήσεων θα πρέπει να χρησιμοποιεί τα σύνθετα δεδομένα location μόνο μέσω κλήσεων στον κατασκευαστή και στις συναρτήσεις επιλογής της Άσκησης 1 . (Σημειώστε ότι οι συναρτήσεις αυτές θα πρέπει να εξακολουθούν να λειτουργούν σωστά -και χωρίς να χρειαστεί να αλλάξουν- ακόμη και αν οι συναρτήσεις location, name, longitude, lattitude στην Άσκηση 1 είχαν υλοποιηθεί με διαφορετικό τρόπο.)
Η κλήση distance(a, b) επιστρέφει την απόσταση (σε χιλιόμετρα) μεταξύ των τοποθεσιών που αναπαριστάνουν τα δεδομένα a, b τύπου location. Η print_location(loc) εμφανίζει στοιχεία για την τοποθεσία loc. Η nearest_location(loc, loc_list, loc_type) επιστρέφει το δεδομένο location που βρίσκεται στη λίστα με τοποθεσίες loc_list το οποίο απέχει τη μικρότερη απόσταση από την τοποθεσία loc και είναι τύπου loc_type. Εάν το είδος της τοποθεσίας παραληφθεί, πχ., καλώντας nearest_location(loc, loc_list), τότε επιστρέφεται η κοντινότερη τοποθεσία ανάμεσα σε αυτές στη loc_list ανεξάρτητα από το είδος της.
def distance(a, b): |
Συμπληρώστε τα κενά _________ ώστε η κλήση pick_cherries_only() να έχει το αποτέλεσμα που περιγράφεται στα σχόλια.
def pick_cherries_only(): |
Συμπληρώστε τα κενά ώστε η κλήση pick_cherries_onebyone() να έχει το αποτέλεσμα που περιγράφεται στα σχόλια, χωρίς να χρησιμοποιήσετε πρωταρχικές εκφράσεις όπως 'cherry2', 'cherry3', κτλ.
def pick_cherries_onebyone(): |
Συμπληρώστε τα κενά ώστε η κλήση pick_cherries(field) να εμφανίζει τις συμβολοσειρές (str) οι οποίες βρίσκονται στην πρώτη θέση των φωλιασμένων λιστών που δίνονται στο όρισμα field, όπως στα παραδείγματα των σχολίων.
Θεωρήστε ότι το όρισμα field είναι μια φωλιασμένη λίστα της ίδιας μορφής με την cherry_field της Άσκησης 4, με αυθαίρετα πολλές φωλιασμένες λίστες που όμως πάντα το πρώτο τους στοιχείο είναι συμβολοσειρά (str). Το δεύτερο στοιχείο της τελευταίας λίστας (δηλ., αυτής που περιέχεται σε όλες τις άλλες) έχει τιμή None.
Η υλοποίησή σας πρέπει να χρησιμοποιεί την εντολή while στο σώμα της pick_cherries. (Σημειώστε ότι το πλήθος των γραμμών με κενά είναι ενδεικτικό μόνο: μπορείτε να χρησιμοποιήσετε περισσότερες ή λιγότερες τέτοιες γραμμές.)
def pick_cherries(field): |
Συμπληρώστε τον κώδικα στη συνάρτηση all_iter έτσι ώστε η κλήση all_iter(func, ls) να επιστρέφει True εάν και μόνο εάν η κλήση func(x) έχει τιμή True για όλα τα στοιχεία x της λίστας ls.
Η υλοποίησή σας θα πρέπει να χρησιμοποιεί επαναληπτικό υπολογισμό, δηλ., την εντολή while ή for, χωρίς comprehensions ή αναδρομικό υπολογισμό. (Στις ασκήσεις 7 εως 9 θα υλοποιήσετε την ίδια συνάρτηση με τους άλλους τρόπους.)
def all_iter(func, ls):
"""True mono ean i klisi func(x) epistrefei True
gia ola ta stoixeia x tis ls.
func -- synartisi enos orismatos
ls -- lista
Paradeigmata:
>>> all_iter(lambda x: x >= 0, [1, 2, 3, 0, 4])
True
>>> all_iter(lambda x: x >= 0, [1, 2, -3, 0, 4])
False
>>> all_iter(lambda x: x % 2 == 0, [100, 10, 2022, 12])
True
"""
"""XRHSIMOPOIHSTE EPANALHPTIKO YPOLOGISMO (for 'h while).
MHN XRHSIMOPOIHSETE LIST COMPREHENSIONS 'h ANADROMI."""
"""GRAPSTE TON KWDIKA SAS APO KATW."""
Συμπληρώστε τον κώδικα στη συνάρτηση all_rec έτσι ώστε η κλήση all_rec(func, ls) να επιστρέφει True εάν και μόνο εάν η κλήση func(x) έχει τιμή True για όλα τα στοιχεία x της λίστας ls.
Η υλοποίησή σας θα πρέπει να χρησιμοποιεί αναδρομικό υπολογισμό, χωρίς επαναληπτικό υπολογισμό, (δηλ., την εντολή while ή fo)r ή comprehensions . (Στις ασκήσεις 6 εως 9 θα υλοποιήσετε την ίδια συνάρτηση με τους άλλους τρόπους.)
def all_rec(func, ls):
"""True mono ean i klisi func(x) epistrefei True
gia ola ta stoixeia x tis ls.
func -- synartisi enos orismatos
ls -- lista
Paradeigmata:
>>> all_rec(lambda x: x >= 0, [1, 2, 3, 0, 4])
True
>>> all_rec(lambda x: x >= 0, [1, 2, -3, 0, 4])
False
>>> all_rec(lambda x: x % 2 == 0, [100, 10, 2022, 12])
True
"""
"""XRHSIMOPOIHSTE ANADROMH.
MHN XRHSIMOPOIHSETE LIST COMPREHENSIONS 'h EPANALHPTIKO YPOLOGISMO
(for 'h while)."""
"""GRAPSTE TON KWDIKA SAS APO KATW."""
Συμπληρώστε τον κώδικα στη συνάρτηση all_lc έτσι ώστε η κλήση all_lc(func, ls) να επιστρέφει True εάν και μόνο εάν η κλήση func(x) έχει τιμή True για όλα τα στοιχεία x της λίστας ls.
Η υλοποίησή σας θα πρέπει να χρησιμοποιεί επεξεργασία ακολουθιών με list comprehensions, χωρίς αναδρομικό ή επαναληπτικό υπολογισμό, (δηλ., την εντολή while ή for) . (Στις ασκήσεις 6 εως 9 θα υλοποιήσετε την ίδια συνάρτηση με τους άλλους τρόπους.)
def all_lc(func, ls):
"""True mono ean i klisi func(x) epistrefei True
gia ola ta stoixeia x tis ls.
func -- synartisi enos orismatos
ls -- lista
Paradeigmata:
>>> all_lc(lambda x: x >= 0, [1, 2, 3, 0, 4])
True
>>> all_lc(lambda x: x >= 0, [1, 2, -3, 0, 4])
False
>>> all_lc(lambda x: x % 2 == 0, [100, 10, 2022, 12])
True
"""
"""XRHSIMOPOIHSTE EPE3ERGASIA AKOLOU8IWN ME LIST COMPREHENSIONS.
MHN XRHSIMOPOIHSETE ANADROMH 'h EPANALHPTIKO YPOLOGISMO
(for 'h while)."""
"""GRAPSTE TON KWDIKA SAS APO KATW."""
Συμπληρώστε τον κώδικα στη συνάρτηση all_hof έτσι ώστε η κλήση all_hof(func, ls) να επιστρέφει True εάν και μόνο εάν η κλήση func(x) έχει τιμή True για όλα τα στοιχεία x της λίστας ls.
Η υλοποίησή σας θα πρέπει να χρησιμοποιεί επεξεργασία ακολουθιών με συναρτήσεις ανώτερου επιπέδου (map, filter, reduce), χωρίς αναδρομικό ή επαναληπτικό υπολογισμό, (δηλ., την εντολή while ή for) ή comprehensions . (Στις ασκήσεις 6 εως 8 θα υλοποιήσετε την ίδια συνάρτηση με τους άλλους τρόπους.)
def all_hof(func, ls):
"""True mono ean i klisi func(x) epistrefei True
gia ola ta stoixeia x tis ls.
func -- synartisi enos orismatos
ls -- lista
Paradeigmata:
>>> all_hof(lambda x: x >= 0, [1, 2, 3, 0, 4])
True
>>> all_hof(lambda x: x >= 0, [1, 2, -3, 0, 4])
False
>>> all_hof(lambda x: x % 2 == 0, [100, 10, 2022, 12])
True
"""
"""XRHSIMOPOIHSTE EPE3ERGASIA AKOLOU8IWN ME SYNARTHSEIS ANWTEROY EPIPEDOY
(map, filter, reduce).
MHN XRHSIMOPOIHSETE ANADROMH, EPANALHPTIKO YPOLOGISMO (for 'h while)
'h LIST COMPREHENSIONS."""
"""GRAPSTE TON KWDIKA SAS APO KATW."""
Συμπληρώστε τον κώδικα στη συνάρτηση primes_up_to έτσι ώστε η κλήση primes_up_to(n) να επιστρέφει λίστα που περιέχει όλους τους πρώτους αριθμούς μικρότερους ή ίσους του n. (Ένας αριθμός είναι πρώτος εάν είναι μεγαλύτερος ή ίσος του 2 και δεν έχει άλλους διαιρέτες εκτός φυσικά το 1 και τον ίδιο.)
Η υλοποίησή σας θα πρέπει να χρησιμοποιεί το "κόσκινο του Ερατοσθένη" με επαναληπτικό φιλτράρισμα ακολουθιών, όπως περιγράφεται στη διάλεξη 7, με επεξεργασία ακολουθιών (list comprehensions ή συναρτήσεις ανώτερου επιπέδου). Χρησιμοποιήστε εντολή επανάληψης για την επαναληπτική εφαρμογή του φιλτραρίσματος.
def primes_up_to(n):
"""Prwtoi ari8moi ews to n.
n -- akeraios >= 2
Epistrefei lista me olous tous prwtous ari8mous mikroterous 'h isous me n.
Paradeigmata:
>>> primes_up_to(10)
[2, 3, 5, 7]
>>> primes_up_to(20)
[2, 3, 5, 7, 11, 13, 17, 19]
>>> len(primes_up_to(10000))
1229
"""
"""XRHSIMOPOIHSTE EPE3ERGASIA AKOLOU8IWN ME LIST COMPREHENSIONS 'h
SYNARTHSEIS ANWTEROY EPIPEDOY (map, reduce, filter)."""
"""GRAPSTE TON KWDIKA SAS APO KATW."""