Μάθημα 1 - Τα βασικά

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

Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό medigeek » 07 Ιουν 2009, 02:04

Το αρχείο του μαθήματος:
http://files.ubuntu-gr.org/learning/python/01-basics.html

Αν δε διαβάσατε το "μάθημα 0 - εισαγωγή", θα ήταν καλό να αρχίσετε από εκεί.

Και να'μαστε πάλι στην τάξη, για να αρχίσουμε με τα βασικά. Αυτό το μάθημα θα καλύψει αρκετά από τα βασικά θέματα που πρέπει να γνωρίζετε για την Python και (γιατί όχι;) για τον προγραμματισμό γενικά.

Ένα πράγμα που πρέπει να ξέρετε είναι ότι ένα πρόγραμμα δεν είναι ποτέ απόλυτη και στάσιμη δουλειά, δεν "έραψες μπλούζα και τέλειωσες". Υπάρχει συνέχεια, υπάρχουν σφάλματα, υπάρχουν χαρακτηριστικά που δεν έχουν καλυφθεί, υπάρχουν τρόποι να γίνεται ολοένα και καλύτερο!


Αυτό που όλοι γυρεύετε

Η ομάδα των μεταφραστών συνεχίζει το τρανό έργο της μετάφρασης των κεφαλαίων του βιβλίου "A byte of Python".

Η ύλη για διάβασμα είναι τα ακόλουθα κεφάλαια:

6. Τα βασικά
7. Τελεστές και εκφράσεις

Let the games begin! :mrgreen:


Ερωτήσεις;

Οποιεσδήποτε ερωτήσεις έχετε, εναποθέστε τις σε αυτό το θέμα - Μην δημιουργήσετε καινούργιο.

Ασκήσεις

Οι ασκήσεις αυτού του μαθήματος θα δοθούν μαζί με τις ασκήσεις για το Μάθημα 0 την επόμενη Κυριακή![/b]
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό kostaz8 » 07 Ιουν 2009, 16:14

# Παραδείγματα ορθής ονοματοδοσίας αναγνωριστικού: i, __my_name, name_23, a1b2_c3 και resumé_count.
# Παραδείγματα εσφαλμένης ονοματοδοσίας αναγνωριστικού: 2things, this is spaced out, my-name, και "this_is_in_quotes".


Το (,) πέζει καποιο ρόλοστην ονοματοδοσία? εδώ ξεκινά με (i)δεν θα έπρεπε το (i) να ειναι κεφαλέο? αυτό το "resumé_count." τι είναι?
kostaz8
babeTUX
babeTUX
 
Δημοσιεύσεις: 51
Εγγραφή: 20 Μάιος 2009, 14:57
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό medigeek » 07 Ιουν 2009, 18:15

Ευχαριστώ, διορθώθηκε. :)

Γενικώς δεν είναι καλό να το εφαρμόσετε ακόμη, μιας και τα περισσότερα λειτουργικά συστήματα που θα αναπαράγουν τον κώδικα δεν έχουν python3 ακόμη. :)

Το θέμα είναι ότι θέλει να πει πως στην python3 (δεν ισχύει για παλαιότερες εκδόσεις python2.x!!) υποστηρίζονται utf-8 χαρακτήρες:

random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ

Κώδικας: Επιλογή όλων
$ python3
Python 3.0.1+ (r301:69556, Apr 15 2009, 17:25:52)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ = 1
>>> print(random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ)
1
>>>


Μπορείς να το εφαρμόσεις και χωρίς το "# -*- coding: utf-8 -*-" το οποίο σας είπα ότι είναι αναγκαίο, αλλά είναι καλό να το χρησιμοποιείς:
Κώδικας: Επιλογή όλων
#!/usr/bin/python3
# -*- coding: utf-8 -*-
random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ = 1
print(random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ)


Πηγή:
http://docs.python.org/3.0/reference/le ... dentifiers
Identifiers (also referred to as names) are described by the following lexical definitions.

The syntax of identifiers in Python is based on the Unicode standard annex UAX-31, with elaboration and changes as defined below; see also PEP 3131 for further details.

Within the ASCII range (U+0001..U+007F), the valid characters for identifiers are the same as in Python 2.x: the uppercase and lowercase letters A through Z, the underscore _ and, except for the first character, the digits 0 through 9.

Python 3.0 introduces additional characters from outside the ASCII range (see PEP 3131). For these characters, the classification uses the version of the Unicode Character Database as included in the unicodedata module.

Identifiers are unlimited in length. Case is significant.


Σύγκριση με python2.6
- δε δουλεύει:
Κώδικας: Επιλογή όλων
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ = 1
print(random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ)


- δε δουλεύει:
Κώδικας: Επιλογή όλων
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ = "Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ"
print(random_utf8_characters_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ)

- δε δουλεύει:
Κώδικας: Επιλογή όλων
#!/usr/bin/python2.6
random_utf8_characters = "Յασασδժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓSDFSDFsdfdf߆ପବଭφγφδγρρdsfsd"
print(random_utf8_characters)


- δουλεύει:
Κώδικας: Επιλογή όλων
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
random_utf8_characters = "Յασασδժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓSDFSDFsdfdf߆ପବଭφγφδγρρdsfsd"
print(random_utf8_characters)


Σε python3 (με "#!/usr/bin/python3" στην πρώτη γραμμή) όλα τα παραπάνω δουλεύουν χωρίς πρόβλημα. ;)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό kon_nos » 08 Ιουν 2009, 12:33

Ερώτηση:
Δεν έχω καταλάβει αυτό το κομμάτι:
Κώδικας: Επιλογή όλων
Δεν υπάρχουν "ASCII-only" συμβολοσειρές, διότι το πρότυπο Unicode αποτελεί υπερσύνολο του ASCII. Αν απαιτείται ένα ASCII-encoded byte-stream, τότε χρησιμοποιείστε str.encode("ascii").

Που γράφουμε το str.encode("ascii") για να λειτουργήσει; Μετά από αυτό επηρεάζεται και η ονοματοδοσία των μεταβλητών ή μόνο οι συμβολοσειρές;
Εγκατάσταση των OpenGL headers σε Ubuntu
«Tων πολλών επιδίωξη η Ηδονή, των εκλεκτών η Δόξα, των δ’ επιλέκτων η Αρετή» - Αριστοτέλης
Άβαταρ μέλους
kon_nos
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 382
Εγγραφή: 09 Νοέμ 2008, 01:11
Τοποθεσία: Αθήνα, Νέο Φάληρο
IRC: kon_nos
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό Μάριος Ζηντίλης » 08 Ιουν 2009, 13:44

Με την εντολή:

Κώδικας: Επιλογή όλων
>>> name = 'Marios' 


φτιάχνω μια μεταβλητή με το όνομα name και της εκχωρώ την τιμή 'Marios'. Η τιμή αυτή είναι από προεπιλογή σε utf-8 κωδικοποιημένη. Με την εντολή:

Κώδικας: Επιλογή όλων
>>> name_ascii = name.encode("ascii") 


φτιάχνω μια καινούρια μεταβλητή με το όνομα name_ascii και της εκχωρώ την τιμή της name κωδικοποιημένη κατά Ascii. Έτσι έχω:

Κώδικας: Επιλογή όλων
>>>name
'Marios'
>>>name_ascii
b
'Marios' 


Αυτό το b μπροστά από το όνομα δείχνει ότι η συμβολοσειρά είναι κωδικοποιημένη κατά ASCII. Ας δούμε και ένα ακόμα παράδειγμα:

Κώδικας: Επιλογή όλων
>>> name = 'Μάριος'
>>> name
'Μάριος'
>>> name_ascii = name.encode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)


Εδώ η Python διαμαρτύρεται ότι δε μπορεί μετατρέψει τη συμβολοσειρά 'Μάριος' σε ASCII γιατί οι χαρακτήρες που χρησιμοποιούνται δεν ανήκουν στο σύνολο ASCII.

Αυτά ισχύουν για τις συμβολοσειρές. Για την ονοματοδοσία των μεταβλητών ισχύουν όσα ειπώθηκαν αλλού.
Τελευταία επεξεργασία από Μάριος Ζηντίλης και 08 Ιουν 2009, 14:26, έχει επεξεργασθεί 1 φορά/ες συνολικά
Άβαταρ μέλους
Μάριος Ζηντίλης
punkTUX
punkTUX
 
Δημοσιεύσεις: 220
Εγγραφή: 25 Σεπ 2008, 11:16
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό kon_nos » 08 Ιουν 2009, 14:05

Ωραία έκανα και μερικούς πειραματισμούς:
Κώδικας: Επιλογή όλων
>>> τεστ = 'hello'
>>> τεστ2 = τεστ.encode("ascii")
>>> τεστ2
b'hello'

Άρα ισχύει μόνο στις συμβολοσειρές.
Υπάρχει όμως τρόπος ο κώδικάς μας να είναι μόνο ASCII (δηλαδή και τα ονόματα των μεταβλητών);
Τελευταία επεξεργασία από kon_nos και 08 Ιουν 2009, 14:53, έχει επεξεργασθεί 1 φορά/ες συνολικά
Εγκατάσταση των OpenGL headers σε Ubuntu
«Tων πολλών επιδίωξη η Ηδονή, των εκλεκτών η Δόξα, των δ’ επιλέκτων η Αρετή» - Αριστοτέλης
Άβαταρ μέλους
kon_nos
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 382
Εγγραφή: 09 Νοέμ 2008, 01:11
Τοποθεσία: Αθήνα, Νέο Φάληρο
IRC: kon_nos
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό medigeek » 08 Ιουν 2009, 14:06

(text strings = συμβολοσειρές)

Το κομμάτι που παράθεσες ήταν σημείωση
Σημείωση για έμπειρους προγραμματιστές


Το unicode "ας πούμε" πως είναι σύνολο με χαρακτήρες από όλες τις γλώσσες, π.χ.
Κώδικας: Επιλογή όλων
Յασασδժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓSDFSDFsdfdf߆ପବଭφγφδγρρdsfsd


Το ascii περιέχει μόνο μερικούς χαρακτήρες, που χρησιμοποιούνται κυρίως στα αγγλικά: http://el.wikipedia.org/wiki/ASCII
Στο ascii υπάρχουν:
  1. Εκτυπώσιμοι χαρακτήρες (φαίνονται και μπορούν να εκτυπωθούν με print())
    Εικόνα
  2. χαρακτήρες ελέγχου (δε φαίνονται, δε μπορούν να εκτυπωθούν με print())

Το Unicode περιέχει και τους χαρακτήρες του ASCII, οπόταν λέμε ότι υπερσύνολο του ASCII.

Τώρα, σε κάποιες γλώσσες προγραμματισμού προφανώς (δεν είμαι σίγουρος) υπάρχει τρόπος να φτιάξεις ένα text string με μόνο ASCII ("αγγλικούς") χαρακτήρες, παρ' όλο που έδωσες κι άλλους.

Στην python μπορείς να "μετατρέψεις" Unicode/UTF-8 σε ASCII-only. Παράδειγμα:
python2.6
Κώδικας: Επιλογή όλων
$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> title = u"Klüft skräms inför på fédéral électoral große"
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'


Δεν ισχύει για όλες τις γλώσσες, ούτε για όλους τους χαρακτήρες:
Κώδικας: Επιλογή όλων
$ python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> title = u"Η Μαρία πήγε στον μπακάλη να αγοράσει γάλα"
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'       '
>>> unicodedata.normalize('NFC', title).encode('ascii','ignore')
'       '
>>> unicodedata.normalize('NFKC', title).encode('ascii','ignore')
'       '


Σημείωση: Το "u" μπροστά στο u"Klüft skräms inför på fédéral électoral große" λέει στην python να φυλάξει το text string ως Unicode.

python3.0
Κώδικας: Επιλογή όλων
$ python3
Python 3.0.1+ (r301:69556, Apr 15 2009, 17:25:52)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import unicodedata
>>> title = "Klüft skräms inför på fédéral électoral große"
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
b'Kluft skrams infor pa federal electoral groe'


Σημείωση: Προσέξτε πως στην python3 δε χρειάζεται το "u" μπροστά από το "Klüft skräms inför på fédéral électoral große", μιας και πιο πάνω ανέφερα ότι τα text strings φυλάγονται εξ' αρχής ως unicode, αλλιώς βγάζει "SyntaxError" (Συντακτικό λάθος):

Κώδικας: Επιλογή όλων
>>> title = u"Klüft skräms inför på fédéral électoral große"
  File "<stdin>", line 1
    title = u"Klüft skräms inför på fédéral électoral große"
                                                                    ^
SyntaxError: invalid syntax
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό medigeek » 11 Ιουν 2009, 12:48

Παιδιά τι έγινε, το βιβλίο τα κάλυψε όλα;; :D
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό paschalis.m » 11 Ιουν 2009, 14:00

savva οταν μπουν και οι ασκησεις θα σου πω τι εχει να γινει.......
προσωπικα παντως καλυφθηκα απο το βιβλιο, απλα χρειαζομαι καμια ασκηση να δω τι καταλαβα.....οποτε περιμενω.κυριακη κοντη γιορτη.
(εκτος αν θα εχουμε κατι για μεζεδακι σημερις.........λεω εγω τωρα.)
Εικόνα
Άβαταρ μέλους
paschalis.m
punkTUX
punkTUX
 
Δημοσιεύσεις: 280
Εγγραφή: 10 Σεπ 2008, 22:10
IRC: paschalis
Εκτύπωση

Re: Μάθημα 1 - Τα βασικά

Δημοσίευσηαπό medigeek » 11 Ιουν 2009, 18:53

Ε καλά, για τα βασικά μην περιμένετε και κάτι δύσκολο :shh: Θα δούμε την Κυριακή λοιπόν!
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Επόμενο

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