Στη σειρά ασκήσεων αυτή θα συμπληρώσετε τον κώδικα Python που βρίσκεται στο αρχείο hw1.py, ως εξής:
Μπορείτε να καλέσετε τις συναρτήσεις στο hw1.py από το διαδραστικό περιβάλλον της Python ως εξής:
>>> from hw1 import * |
Εάν θέλετε να δοκιμάσετε μόνο μια συνάρτηση, πχ., την f της Άσκησης 1, γράφετε:
>>> from hw1 import f |
>>> f(-1) |
Εναλλακτικά, μπορείτε να εκτελέσετε τους αυτόματους ελέγχους για ορθότητα κώδικα (doctests) που περιέχονται στα σχόλια αμέσως μετά τους ορισμούς συναρτήσεων. Σε Windows από τη γραμμή εντολών γράψτε:
python -m doctest -v hw1.py |
Σε Linux/MacOS γράψτε στο shell/terminal:
python3 -m doctest -v hw1.py |
Στο τερματικό σας θα εμφανιστεί αναλυτική αναφορά λαθών.
Αν εμφανιστεί μήνυμα λάθους από τον διερμηνευτή ή η συνάρτηση δεν κάνει τον σωστό υπολογισμό/παρενέργεια, επιστρέψτε στον text editor και αλλάξτε τον κώδικά σας. Έπειτα, πάλι αποθηκεύστε τις αλλαγές και δοκιμάστε τον κώδικα όπως παραπάνω, κοκ. Συνεχίστε μέχρι οι συναρτήσεις να έχουν τη συμπεριφορά που περιγράφεται στα σχόλια κάθε συνάρτησης. (Προσοχή: δεν αρκεί να δίδεται το σωστό αποτέλεσμα μόνο για τα παραδείγματα στα σχόλια! Θα πρέπει να λειτουργεί σωστά για κάθε τιμή ορισμάτων/εισόδων όπως περιγράφεται στην εκφώνηση).
Μπορείτε να παραδίνετε απαντήσεις (με τον παραπάνω τρόπο) χωρίς να έχετε συμπληρώσει το σώμα όλων των συναρτήσεων.
Σημείωση: Διαβάστε επίσης τις γενικές οδηγίες (ισχύουν για όλες τις σειρές ασκήσεων)
Η βαθμολόγηση των ασκήσεων θα βασιστεί σε ελέγχους ορθότητας παρόμοιους με αυτούς που περιέχονται στο αρχείο hw1_tests.txt που βρίσκεται στα έγγραφα του eclass.
Για να εκτελέσετε τους ελέγχους από τη γραμμή εντολών των Windows δώστε:
> python -m doctest -v hw1_tests.txt |
Σε unix/Linux ή MacOS γράψτε στο shell:
> python3 -m doctest -v hw1_tests.txt |
(Σιγουρευτείτε ότι τρέχετε την εντολή αυτή από κατάλογο που περιέχει τόσο hw1.py όσο και το hw1_tests.py.)
Θα παραδώσετε μόνο το τελικό αρχείο hw1.py.
Συμπληρώστε τα κενά _______ του κώδικα της συνάρτησης f ώστε η κλήση f(x) να υπολογίζει την τιμή της παράστασης 1/(2 + 3/(x+4) + 1/x) για οποιονδήποτε αριθμό x χρησιμοποιώντας μόνο εκφράσεις κλήσης, δηλ. εκφράσεις που δεν περιέχουν ενθεματικούς τελεστές (+, /, ...).
def f(x): |
Συμπληρώστε τα κενά _______ του κώδικα της συνάρτησης g ώστε η κλήση g(x, y) να υπολογίζει την τιμή της έκφρασης sqrt(add(pow(add(x, y), 2), pow(sub(x, y), 2))) για οποιουσδήποτε αριθμούς x, y χρησιμοποιώντας μόνο ενθεματικούς τελεστές (+, *, /, ** κτλ.) χωρίς να περιέχονται εκφράσεις κλήσης.
def g(x, y):
"""
x,y -- ari8moi
Epistrefei timi isi me sqrt(add(pow(add(x, y), 2), pow(sub(x, y), 2)))
>>> g(1, 1)
2.0
>>> g(1.5, 1.5)
3.0
>>> round(g(3, 1), 5)
4.47214
"""
""" Xrhsimopoihste en8ematikous telestes(+, -, *, **, ...)
OXI ekfraseis klhshs """
_________________________________________
Η απάντησή σας δεν πρέπει να χρησιμοποιεί περισσότερες γραμμές από τις γραμμές που καταλαμβάνουν τα κενά ________. (Ούτε να χρησιμοποιείτε πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , )
Συμπληρώστε τα κενά _______ του κώδικα της how ώστε η κλήση how() να εμφανίζει 1 2 3 όπως περιγράφεται στα σχόλια.
def how():
"""Symplhrwste ta kena wste na didetai to
akolou8o apotelesma
>>> how()
1 2 3
"""
x = ______
y = ______
__________
x, y, z = y, z, -x
x, y, z = y, z, -x
print(x, y, z)
Η απάντησή σας θα πρέπει να γραφεί μόνο στο χώρο που καταλαμβάνουν τα κενά __________ (ο ακριβής αριθμός τους δεν έχει σημασία.) (Όπου τα κενά καταλαμβάνουν ολόκληρη γραμμή δεν πρέπει να χρησιμοποιούνται περισσότερες γραμμές ούτε να χρησιμοποιούνται πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , ) Επίσης, δεν πρέπει να αλλάξετε τον υπόλοιπο κώδικα ή να αποφύγετε την εκτέλεση του.
Συμπληρώστε τα κενά _______ του κώδικα της συνάρτησης func0 ώστε η τιμή της έκφρασης
func0('I') + ' ' + func0('Bi') + ' ' + 'Spider' να είναι η συμβολοσειρά 'Itsy Bitsy Spider'.
def func0(s):
"""Symplhrwste ta kena wste na didetai to
akolou8o apotelesma
>>> func0('I') + ' ' + func0('Bi') + ' ' + 'Spider'
'Itsy Bitsy Spider'
"""
return ___________________
Η απάντησή σας θα πρέπει να γραφεί μόνο στο χώρο που καταλαμβάνουν τα κενά __________ (ο ακριβής αριθμός τους δεν έχει σημασία.) Επίσης, δεν πρέπει να αλλάξετε τον υπόλοιπο κώδικα ή να αποφύγετε την εκτέλεση του.
Συμπληρώστε την κενή γραμμή _______ του κώδικα της func1 ώστε οι εκφράσεις στα σχόλια να έχουν το αναγραφόμενο αποτέλεσμα.
def func1(n, c, s):
"""Symplhrwste ta kena wste:
>>> func1(1, '*', '-')
'*'
>>> func1(2, '*', '-')
'**-**'
>>> func1(3, '*', '-')
'***-***-***'
>>> func1(4, 'z', 'Z')
'zzzzZzzzzZzzzzZzzzz'
>>> func1(1, '-', '*') == '-'
True
"""
_________________________________
Η απάντησή σας δεν πρέπει να χρησιμοποιεί περισσότερες γραμμές από τις γραμμές που καταλαμβάνουν τα κενά ________. (Ούτε να χρησιμοποιείτε πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , )
Συμπληρώστε την κενή γραμμή _______ του κώδικα της func2 ώστε οι εκφράσεις στα σχόλια να έχουν το αναγραφόμενο αποτέλεσμα.
def func2(s):
"""Symplhrwste ta kena wste na didetai to
akolou8o apotelesma
>>> func2('la')
'la-la'
>>> func2(func2('la'))
'la-la-la-la'
>>> func2(func2(func2('la')))
'la-la-la-la-la-la-la-la'
"""
_____________________________________
Η απάντησή σας δεν πρέπει να χρησιμοποιεί περισσότερες γραμμές από τις γραμμές που καταλαμβάνουν τα κενά ________. (Ούτε να χρησιμοποιείτε πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , )
Συμπληρώστε το σώμα της draw_number ώστε η κλήση draw_number(x) να εμφανίζει στο τερματικό x χαρακτήρες + ή x χαρακτήρες - εάν αντίστοιχα το x είναι θετικός ή αρνητικός αριθμός. Στην περίπτωση που το x είναι 0 δεν εμφανίζεται τίποτα. Η draw_number(x) επιστρέφει None.
def draw_number(x):
"""Emfanizei ton xarakthra + 'h - x fores
>>> draw_number(5)
+++++
>>> draw_number(0)
>>> draw_number(-3)
---
>>> draw_number(2) == None
++
True
"""
""" GRAPSTE TON KWDIKA SAS APO KATW """
Συμπληρώστε το σώμα της calculate ώστε η κλήση calculate() να ζητά δύο αριθμούς από τον χρήστη, μια αριθμητική πράξη που θα εφαρμόσει και έπειτα να εμφανίζει στο τερματικό το αποτέλεσμα της εφαρμογής της στους αριθμούς. Ο χρήστης δίνει + για πρόσθεση, - για αφαίρεση, * για πολλαπλασιασμό, / για διαίρεση και ** για ύψωση σε δύναμη (του πρώτου αριθμού στον δεύτερο).
def calculate(): |
Στα παραπάνω παραδείγματα, τα συμβολα με έντονη εμφάνιση είναι η είσοδος του χρήστη.
Να ορίσετε συνάρτηση hailstone η οποία εμφανίζει στο τερματικό τους όρους της επονομαζόμενης «ακολουθίας του χαλαζιού» οι οποίοι δημιουργούνται ως εξής,
και επιστρέφει το πλήθος των όρων που εμφανίστηκαν.
Για παράδειγμα,
>>> a = hailstone(4) |