Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

...ασύγχρονα μαθήματα python

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό eliasps » 09 Ιουν 2014, 04:05

@midkin επειδή δεν έχω διαβάσει ακόμα το μάθημα, το βιβλίο ή τυχούσα κουβέντα που έχει προηγηθεί, από το να μπω στην διαδικασία να εξηγήσω τι συμβαίνει, απλά να σου πω πως στον προγραμματισμό και ιδιαίτερα όταν μάθαινα Python, με βοηθούσε πολύ να τροποποιώ τα προγράμματα που βλέπω απλά βάζοντας εντολές print σε διάφορα σημεία, έτσι ώστε να βλέπω «real time» τι συμβαίνει κατά τη διαδικασία του προγράμματος, αντί να προσπαθώ να το σκεφτώ αλγοριθμικά ως αρχάριος.
Για παράδειγμα εδώ, μπορείς να προσθέσεις εντολές print:
Μορφοποιημένος Κώδικας: Επιλογή όλων
def total(initial=5, *numbers, **keywords):
print "initial:", initial
print "numbers:", numbers
print "keywords:", keywords
count = initial
print "count:", count
print "------"
print "for number in numbers:"
for number in numbers:
count += number
print "number:", number, " count:", count
print "------"
print "for key in keywords:"
for key in keywords:
count += keywords[key]
print "keywords[key]:", keywords[key], " count:", count
return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))

Συγνώμη αν η απάντησή μου είναι άστοχη ή δεν βοηθά σε αυτό που ζητάς, απλά το γράφω γιατί είναι ένας τρόπος να κατανοήσεις καλύτερα έναν αλγόριθμο και να βλέπεις τι συμβαίνει τη στιγμή που εκτελείται και όχι μόνο το τελικό αποτέλεσμα. Ίσως έτσι το πρόγραμμα "εξηγεί" μόνο του τι κάνει σε κάποιες περιπτώσεις.
Άβαταρ μέλους
eliasps
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4017
Εγγραφή: 16 Δεκ 2011, 22:25
Τοποθεσία: Αθήνα, Αττική
Launchpad: eliasps
IRC: eliasps
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 04:26

Καλή η σκέψη καθώς τώρα βλέπω βήμα βήμα τι γίνεται.
Ωστόσο αδυνατό να συνδιάσω τα αποτελέσματα με τις εντολές...
Θέλω εξήγηση για το τι ακριβώς γίνεται σε κάθε βήμα..

Είμαι στο κεφάλαιο των συναρτήσεων! Ως τώρα δεν είχα πρόβλημα να καταλάβω τα παραδείγματα, αλλά στο παραπάνω παράδειγμα δεν κατάλαβα τίποτα...
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό Ilias95 » 09 Ιουν 2014, 14:48

Όταν χρησιμοποιείς την σύνταξη με το ένα αστεράκι σαν παράμετρο μιας συνάρτησης τότε ότι στοιχεία δώσεις θα αποθηκευτούν σε μια tuple:
Κώδικας: Επιλογή όλων
>>> def func(*args):
...     print(args)
...
>>> func(1, 'dyo', 'gianis', 3)
(1, 'dyo', 'gianis', 3)
>>>


Με τα δύο αστεράκια, με τα ορίσματα που θα δώσεις δημιουργείτε ένα dict:
Κώδικας: Επιλογή όλων
>>> def func(**args):
...     print(args)
...
>>> func(vegetables=50, fruits=100, horses=12)
{'vegetables': 50, 'fruits': 100, 'horses': 12}
>>>


Στο παραπάνω παράδειγμα τα χρησιμοποιεί ταυτόχρονα και αθροίζει τις τιμές τους μέσα στην συνάρτηση χρησιμοποιώντας σαν counter την μεταβλητή count.

Ο τελεστής += (γιατί θυμάμαι ότι στο συγκεκριμένο βιβλίο δεν τον εξηγεί) προσθέτει στην ήδη υπάρχουσα τιμή της μεταβλητής ότι του δώσεις:
Spoiler: show
Κώδικας: Επιλογή όλων
>>> a = 10
>>> a += 3
>>> print(a)
13
>>> a += 12
>>> print(a)
25
>>>


Μπορείς αντίστοιχα να τον χρησιμοποιήσεις για οποιαδήποτε πράξη:
Spoiler: show
Κώδικας: Επιλογή όλων
>>> a = 10
>>> a *= 2
>>> print(a)
20
>>> a /= 4
>>> print(a)
5.0
>>>


Τα for loops τα χεις δει λογικά, οπότε τα υπόλοιπα τα καταλαβαίνεις. Την σύνταξη με το initial=5 άστη για τώρα και γενικά προσπέρνα το συγκεκριμένο παράδειγμα δεν θα σου φανεί και τόσο χρήσιμο στην αρχή, παρά θα σε μπερδέψει.

PS.
Σχετικά με αυτό που λέγαμε στο άλλο thread, όχι δεν νομίζω ότι έχω να προτείνω κάτι στα ελληνικά/μεταφρασμένο. Δυστυχώς ή ευτυχώς αν θες να ασχοληθείς με προγραμματισμό τα αγγλικά είναι απαραίτητα και η άπειρη βιβλιογραφία που θα βρεις για οποιοδήποτε θέμα σε ενδιαφέρει πάντα θα είναι στα αγγλικά. Το συγκεκριμένο βιβλίο απλά και επειδή το έχω διαβάσει ολόκληρο δεν μου αρέσει καθόλου και γι' αυτό δεν το προτείνω. Όπως βλέπεις ήδη σε μπερδεύει πολλές φορές και δεν εξηγεί πολλά πράγματα.

Αφού όμως αναφέρεις ότι τα αγγλικά σου είναι αρκετά καλά, με ποιο βιβλίο δυσκολεύτηκες και δεν το καταλάβαινες;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 19:35

Δεν θυμάμαι ποιο βιβλίο είχα αποπειραθεί να διαβάσω! Ίσως να ήταν το ίδιο στα Αγγλικά!
Παρότι γνωρίζω πολύ καλά αγγλικά, είμαι άσχετος από προγραμματισμό, οπότε ακόμη και όταν καταλάβαινα το αγγλικό κείμενο, μπερδευόμουν για το τι ακριβώς ήθελε να μου πει όταν μέσα στο κείμενο αναφέρονταν και οι αγγλικοί όροι για τον προγραμματισμό!

Από σήμερα το πρωί, άρχισα να παρακολουθώ και κάποια ενδιαφέροντα video toutorial από το youtube στα ελληνικα!

Σε κάθε περίπτωση αν δεν σου κάνει κόπο, περιμένω περισσότερες πληροφορίες είτε σε pm είτε εδώ, για το ποια βιβλία θα μου πρότεινες!
Για αρχάριους, και αφού τα τελειώσω, κάτι για να εμβαθύνω! Έχω πάρει στα σοβαρά (αυτή τη φορά) να μάθω μία γλώσσα και θα ήθελα πολύ (μακροπρόθεσμα) να είμαι σε θέση να φτιάχνω σύνθετα προγράμματα!
Τελευταία έχω αρκετό ελεύθερο χρόνο και με ευχαριστεί πολύ να ασχολούμαι με την Python :)
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό Ilias95 » 09 Ιουν 2014, 19:48

midkin έγραψε:Από σήμερα το πρωί, άρχισα να παρακολουθώ και κάποια ενδιαφέροντα video toutorial από το youtube στα ελληνικα!

Αν σου αρέσει αυτός ο τρόπος διδασκαλίας (μέσα από videos) τότε προτείνω ανεπιφύλακτα το Intro to Computer Science του Udacity. Εκτός από python καλύπτει εισαγωγικές βασικές έννοιες για την Επιστήμη των Υπολογιστών και μάλιστα προχωρώντας το course θα υλοποιήσεις ένα πραγματικό πρόβλημα, το χτίσιμο μιας search engine (ναι, όπως το google). Τα μαθήματα είναι διαδραστικά και έχει συνεχώς ασκήσεις και quiz που θα σε βοηθήσουν. Αν έχεις όρεξη, go for it!

Τώρα από βιβλία, δυστυχώς το βιβλίο που μου αρέσει πολύ και προτείνω εγώ, το Dive into Python 3 απευθύνεται σε άτομα που έχουν μια κάποια εμπειρία στον προγραμματισμό οπότε δεν είναι ότι καλύτερο σ' αυτό το στάδιο. Θα στο πρότεινα για αργότερα όμως.

Ρίξε αν θες μια ματιά σ' αυτό το ποστ: http://www.insomnia.gr/topic/478038-%CE ... ry52205556

μπερδευόμουν για το τι ακριβώς ήθελε να μου πει όταν μέσα στο κείμενο αναφέρονταν και οι αγγλικοί όροι για τον προγραμματισμό!

Και όλοι οι υπόλοιποι μπερδευόμαστε με τους ελληνικούς όρους για τον προγραμματισμό. :P Πέρα απ' την πλάκα, οι μεταφράσεις όρων της πληροφορικής στα ελληνικά συνήθως δεν είναι ότι καλύτερο.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό midkin » 12 Ιουν 2014, 13:35

Επανέρχομαι στο θέμα μετά από λίγες μέρες και λίγο πιο διαβασμένος (μετά την επανάληψη)! Οπότε το πρόγραμμα τρέχει κάπως έτσι;
Κώδικας: Επιλογή όλων
def total(initial=5, *numbers, **keywords):
count = initial  #count = initial = 5
for number in numbers:
count += number # count = count + number = ...
for key in keywords:
count += keywords[key]  #count = count + keywords[key] = ...
return count # ok!
print(total(10, 1, 2, 3, vegetables=50, fruits=100))


# - - - - - - - - - - Running program - - - - - - - - - -
# initial = 10,  numbers = (1,2,3),  keywords = {vegetables : 50, fruits : 100}
# so, count = initial = 10
# ----- running the for loop: -----
#count = 10 + 1
#count = 11 + 2
#count = 13 + 3
# ----- running the 2nd for loop: -----
#count = 16 + 50
#count = 66 + 100
# ----- executing the return: -----
#166


Σωστά; :geek:
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό Ilias95 » 12 Ιουν 2014, 18:45

Σωστά.

Μερικά παραδείγματα για να καταλάβεις και αυτό με το Initial:

Κώδικας: Επιλογή όλων
In [3]: def f(a, b=5):
   ...:     print(a, b)
   ...:     

In [4]: f(4)
4 5

In [5]: f(4, 12)
4 12
In [6]: f()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-0ec059b9bfe1> in <module>()
----> 1 f()

TypeError: f() missing 1 required positional argument: 'a'

In [7]:


Όπως βλέπεις εδώ είναι προαιρετικό να δοθεί τιμή στο b αφού του έχω ορίσει ήδη μια τιμή στο definition της συνάρτησης.
Το a αντίθετα δεν μπορώ να το παραλείψω.

Μπορείς επίσης να κάνεις:
Κώδικας: Επιλογή όλων
In [7]: f(a=6, b=54)
6 54

In [8]: f(a=22)
22 5

In [9]:
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό midkin » 12 Ιουν 2014, 22:13

Οκ τώρα έχω κατανοήσει ΠΛΗΡΩΣ τα κεφάλαια του μαθήματος 3! Θα πάω στις ασκήσεις και βουρ για το μάθημα 4 :D
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Προηγούμενη

Επιστροφή στο Μαθήματα python

cron