Στη σειρά ασκήσεων αυτή θα συμπληρώσετε τον κώδικα 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 και αλλάξτε τον κώδικά σας. Έπειτα, πάλι αποθηκεύστε τις αλλαγές και δοκιμάστε τον κώδικα όπως παραπάνω, κοκ. Συνεχίστε μέχρι οι συναρτήσεις να έχουν τη συμπεριφορά που περιγράφεται στα σχόλια κάθε συνάρτησης. (Προσοχή: δεν αρκεί να δίδεται το σωστό αποτέλεσμα μόνο για τα παραδείγματα στα σχόλια! Θα πρέπει να λειτουργεί σωστά για κάθε τιμή ορισμάτων/εισόδων όπως περιγράφεται στην εκφώνηση).
Παραδίδετε τις απαντήσεις σας ανεβάζοντας στο eclass (μέσα από τον χώρο εργασιών) μόνο το τελικό hw1.py αρχείο.
Μπορείτε να παραδίνετε απαντήσεις (με τον παραπάνω τρόπο) χωρίς να έχετε συμπληρώσει το σώμα όλων των συναρτήσεων.
Σημείωση: Διαβάστε τις γενικές οδηγίες (ισχύουν για όλες τις σειρές ασκήσεων)
Συμπληρώστε τα κενά _______ του κώδικα της συνάρτησης f ώστε η κλήση f(x) να υπολογίζει την τιμή της παράστασης 1/(2 + 3/(x+4) + 1/x) για οποιονδήποτε αριθμό x χρησιμοποιώντας μόνο εκφράσεις κλήσης, δηλ. εκφράσεις που δεν περιέχουν ενθεματικούς τελεστές (+, /, ...).
def f(x):
"""
x -- ari8mos
Epistrefei tin timi 1/(2 + 3/(x+4) + 1/x).
>>> f(-1)
0.5
>>> round(f(-2), 4)
0.3333
>>> round(f(-8), 4)
0.8889
"""
""" Xrhsimopoihste MONO ekfraseis klhshs,
p.x., stis add, mul, pow, sqrt, truediv, ...
OXI en8ematikous telestes (+, /, ...) """
return _______(______________________________)
Συμπληρώστε τα κενά _______ του κώδικα της συνάρτησης 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'
"""
_____________________________________
Η απάντησή σας δεν πρέπει να χρησιμοποιεί περισσότερες γραμμές από τις γραμμές που καταλαμβάνουν τα κενά ________. (Ούτε να χρησιμοποιείτε πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , )
Συμπληρώστε τα κενά _______ του κώδικα της add_inputs ώστε η κλήση add_inputs() να:
def add_inputs():
"""Ypologizei to a8roisma dyo akeraiwn pou dinei o xrhsths
>>> add_inputs() #doctest: +SKIP
3
4
7
>>> print(add_inputs()) #doctest: +SKIP
9
10
19
H eisodos apo ton xristi einai oi ari8moi poy briskontai sthn 1h kai 2h
seira meta thn klisi add_inputs().
"""
return _______________________________
Η απάντησή σας δεν πρέπει να χρησιμοποιεί περισσότερες γραμμές από τις γραμμές που καταλαμβάνουν τα κενά ________. (Ούτε να χρησιμοποιείτε πολλαπλές εντολές ή εκφράσεις σε μια γραμμή χωριζόμενες με ; ή , ) Η είσοδος του χρήστη στα παραδείγματα είναι οι αριθμοί με έντονη εμφάνιση.
Συμπληρώστε τα κενά _______ του κώδικα της parrot ώστε η κλήση parrot() να ζητάει και να επαναλαμβάνει την είσοδο του χρήστη 4 φορές, όπως θα έκανε ένας παπαγάλος που επαναλαμβάνει τις προτάσεις που ακούει. Θα πρέπει να συμπεριφέρεται όπως στο παράδειγμα που περιέχεται στα σχόλια. (Η είσοδος του χρήστη είναι με έντονη εμφάνιση. H παύλα - και το κενό που ακολουθεί δεν εισάγεται από τον χρήστη.)
def parrot():
"""Epanalambanei tin eisodo tou xristi gia 4 fores, opws
akribws sta paradeigmata:
>>> parrot() #doctest: +SKIP
- Hello
- "Hello"
- Who are you?
- "Who are you?"
- I'm losing my patience...
- "I'm losing my patience..."
- OK, forget it
- "OK, forget it"
H eisodos apo ton xristi einai i symboloseira stin 1h, 3h, 5h kai 7h
grammi meta tin klisi parrot(). H eisodos den perilambanei to - kai to
keno pou akolou8ei.
"""
print('- "' + input(______________________) + '"')
Η απάντησή σας θα πρέπει να γραφεί μόνο στο χώρο που καταλαμβάνουν τα κενά __________ (ο ακριβής αριθμός τους δεν έχει σημασία.) Επίσης, δεν πρέπει να αλλάξετε τον υπόλοιπο κώδικα ή να αποφύγετε την εκτέλεση του.
Συμπληρώστε το σώμα της 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 """
Αλλάξτε τον κώδικα της fix_me ώστε η κλήση fix_me() να εμφανίζει στο τερματικό ακριβώς τα ίδια αποτελέσματα χωρίς όμως να επαναλαμβάνεται παρόμοιος κώδικας. Για τον σκοπό αυτό μπορείτε να χρησιμοποιήσετε κλήσεις σε δικές σας συναρτήσεις που θα ορίσετε μετά τη fix_me.
def fix_me():
"""Alla3te ti synartisi poy apokou8ei wste na min
epanalambanetai o idios ypologismos/kwdikas polles fores.
Mporeite na xrhsimopoihsete klhseis se synarthseis poy 8a orisete
amesws meta to swma tis fix_me.
>>> fix_me()
Emvado kyklou aktinas 1 = 3.141592653589793 me perifereia = 6.283185307179586
Emvado kyklou aktinas 2 = 12.566370614359172 me perifereia = 12.566370614359172
Emvado isoskelous or8ogwniou trigwnou me ka8eti pleura 1 = 0.5 me perifereia = 3.414213562373095
Emvado isoskelous or8ogwniou trigwnou me ka8eti pleura 5 = 12.5 me perifereia = 17.071067811865476
"""
""" ALLA3TE TON PARAKATW KWDIKA """
print('Emvado kyklou aktinas', 1, '=', 3.141592653589793 * 1**2,
'me perifereia =', 2 * 3.141592653589793 * 1)
print('Emvado kyklou aktinas', 2, '=', 3.141592653589793 * 2**2,
'me perifereia =', 2 * 3.141592653589793 * 2)
print('Emvado isoskelous or8ogwniou trigwnou me ka8eti pleura', 1,
'=', 0.5 * 1 ** 2,
'me perifereia =', 2 * 1 + sqrt(2 * 1**2))
print('Emvado isoskelous or8ogwniou trigwnou me ka8eti pleura', 5,
'=', 0.5 * 5 ** 2,
'me perifereia =', 2 * 5 + sqrt(2 * 5**2))