# Αρχές Γλωσσών Προγραμματισμού (εργαστήριο 3)
### 18/3/2021
:::danger
Η συγκεκριμένη σελίδα μπορεί να χρησιμοποιηθεί για ερωτήσεις στην ώρα του μαθήματος.
:::
## Πρόγραμμα μαθήματος
| Ώρα | Θέμα |
| --- | ---- |
|10:00-10:10| Συναρτήσεις [09-functions.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/09-functions.ipynb) |
|10:10-10:15| Συναρτήσεις lambda [10-lambdas.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/10-lambdas.ipynb) |
|10:15-10:30| [Άσκηση 1](#Άσκηση-1) |
|10:30-10:50| Κλάσεις [11-classes.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/11-classes.ipynb) |
|10:50-11:00| [Άσκηση 2](#Άσκηση-2) |
|11:00-11:10| Διάλειμμα |
|11:10-11:20| Logging [12-logging.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/12-logging.ipynb) |
|11:20-11:40| Testing με το unittest [13-testing.ipynb](https://github.com/chgogos/dituoi_agp/blob/main/pl/python/notebooks/13-testing.ipynb) |
|11:40-12:00| [Άσκηση 3](#Άσκηση-3) |
### Άσκηση 1
Γράψτε μια συνάρτηση που να δέχεται δύο λεκτικά ίσου μήκους και να επιστρέφει την απόσταση Hamming (δηλαδή το πλήθος των αντίστοιχων χαρακτήρων που διαφέρουν στα δύο λεκτικά)
def hamming_distance(s, t):
pass
Ελέγξτε την ορθότητα με λεκτικά παρόμοια με τα ακόλουθα:
s = "GAGCCTACTAACGGGAT"
t = "CATCGTAATGACGGCCT"
hamming_distance(s, t) # θα πρέπει να επιστρέψει 7
Προσαρμογή από το [Rosalind - Counting Point Mutations](http://rosalind.info/problems/hamm/)
### Άσκηση 2
Δίνεται ο ακόλουθος κώδικας που ορίζει την κλάση Juice και υπερφορτώνει τον τελεστή +.
* Προσθέστε το επιπλέον πεδίο τιμή (price).
* Όταν εφαρμόζεται ο τελεστής πρόσθεσης ο νέος χυμός να έχει τιμή ίση με το άθροισμα τιμών των δύο χυμών.
* Προσθέστε τη μέθοδο pour() που να δέχεται ως παράμετρο μια τιμή από το 0% μέχρι το 100% και να επιστρέφει ένα νέο αντικείμενο Juice με το χυμό που προκύπτει αν ληφθεί το αντίστοιχο ποσοστό περιεχομένου από το καλών αντικείμενο.
Προσαρμογή από το <https://www.sololearn.com/learning/1073>
class Juice:
def __init__(self, name, capacity):
self.name = name
self.capacity = capacity
def __str__(self):
return (self.name + ' ('+str(self.capacity)+'L)')
def __add__(self, other):
return Juice(self.name + '&' + other.name, self.capacity + other.capacity)
a = Juice('Orange', 1.5)
b = Juice('Apple', 2.0)
result = a + b
print(result)
### Άσκηση 3
Γράψτε μια συνάρτηση που να ελέγχει αν μια φράση είναι παντόγραμμα, δηλαδή περιλαμβάνει και τα 24 γράμματα του Ελληνικού αλφαβήτου.
Προσθέστε unittest για τον έλεγχο της συνάρτησης και με logging εμφανίστε πληροφορίες κατά την εκτέλεση της συνάρτησης όπως πλήθος γραμμάτων, πλήθος λέξεων και γράμματα που δεν υπάρχουν.
def is_pangram(s):
pass
## Ερωτήσεις και απαντήσεις
- για να εμφανιστει μεχρι το 100 το range μεχρι 101 δεν το βαζω;
- ναι, για να εμφανιστούν οι τιμές από το 0 μέχρι και το 100 γράφουμε:
```
for i in range(0,101):
print(i)
```
- το λαμδα θεωρείται συναρτηση;
- ναι είναι μια ανώνυμη συνάρτηση
:::info
* Πάντα, κάνετε ερωτήσεις στο κάτω μέρος του εγγράφου, ακριβώς πάνω από εδώ
:::