Τα πάντα για την Python

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 14 Νοέμ 2010, 13:42

Κώδικας: Επιλογή όλων
#!/usr/bin/env python3
# Filename: Hi
def Max(a,b,c):
if b>a and b>c:
print('To μέγιστο είναι το %s' % (b))
if a>b and a>c:
print('To μέγιστο είναι το %s' % (a))
if c>a and c>b:
print('To μέγιστο είναι το %s' % (c))

Max(1, 2, 3)
print('Αντίο')


Γίνεται και με το format() αντί του %s που χρησιμοποίησα παραπάνω:
- http://diveintopython3.org/strings.html ... ng-strings
- http://www.swaroopch.com/notes/Python_el:%CE%A4%CE%B1_%CE%B2%CE%B1%CF%83%CE%B9%CE%BA%CE%AC#.CE.97_.CE.BC.CE.AD.CE.B8.CE.BF.CE.B4.CE.BF.CF.82_format
Κύπριος; Κόπιασε στο 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: Τα πάντα για την Python

Δημοσίευσηαπό yodan000 » 14 Νοέμ 2010, 18:59

γιατί έβαλε %s; το Max(1,2,3) πρέπει να τα βάλω στο πρόγραμμα ή είναι η τιμές που θα βάλω εγώ μετά;
1 Linux: Μέτριος ┃ Προγραμματισμός: Καθόλου ┃ Αγγλικά: Προχωρημένος
2 Ubuntu Gnome τελευταία έκδοση
3 Intel Core i3 CPU M 370 2.40GHz ‖ RAM 3819 MiB ‖ Acer Aspire 5742G
4 NVIDIA Corporation Device [10de:0df1] (rev a1)
5 eth0: Broadcom NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01) ⋮ wlan0: Atheros Inc. AR9287 Wireless Network Adapter (PCI-Express) [168c:002e] (rev 01)
yodan000
saintTUX
saintTUX
 
Δημοσιεύσεις: 1681
Εγγραφή: 12 Ιαν 2010, 00:32
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό kamar » 14 Νοέμ 2010, 22:30

έγραψε:
γιατί έβαλε %s;


Το %s λέει στην Python «Αντικατέστησε το %s με το στοιχείο που θα σου δώσω». Στην προκείμενη περίπτωση λέει στην Python να το δει ως αλφαριθμητικό.
Δες και αυτό: http://docs.python.org/py3k/library/string.html#module-string

έγραψε:
το Max(1,2,3) πρέπει να τα βάλω στο πρόγραμμα ή είναι η τιμές που θα βάλω εγώ μετά

Το def Max(a,b,c): ορίζει μια συνάρτηση με τρεις παραμέτρους. Οι παράμετροι στη συγκεκριμένη συνάρτηση πρέπει να είναι αριθμοί. Αυτό σημαίνει ότι βάζεις τους δικούς σου αριθμούς.
http://docs.python.org/py3k/tutorial/controlflow.html#defining-functions
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 14.04 trusty 3.13.0-91-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD A6-5400K APU with Radeon HD Graphics ‖ RAM 3347 MiB ‖ ASUS F2A55-M LK2 PLUS
4 Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7540D] [1002:9991] {radeon}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 09)
Άβαταρ μέλους
kamar
punkTUX
punkTUX
 
Δημοσιεύσεις: 166
Εγγραφή: 10 Μάιος 2008, 20:24
Τοποθεσία: Χανιά
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 15 Νοέμ 2010, 04:03

yodan000 έγραψε:γιατί έβαλε %s;

Όπως πολύ σωστά είπε ο kamar, χρησιμοποιείται για αντικατάσταση. Ο λόγος που το έβαλα είναι επειδή δεν δικαιούσαι να μπλέξεις αριθμό(integer) με συμβολοσειρά(string):

έγραψε:$ python3
Python 3.1.2 (release31-maint, Sep 17 2010, 20:27:33)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 'This is some text'
>>> print(b + a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly


Ένας εύκολος τρόπος τρόπος αν δεν κατάλαβες την αντικατάσταση είναι να βάζεις τον αριθμό σε str(), μια εντολή/μέθοδος που μετατρέπει τον αριθμό σε συμβολοσειρά:

έγραψε:>>> a = 1
>>> b = 'This is some text'
>>> print(b + str(a))
This is some text1
Κύπριος; Κόπιασε στο 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: Τα πάντα για την Python

Δημοσίευσηαπό yodan000 » 15 Νοέμ 2010, 19:27

α... και άμα θέλω να δίνω εγώ κάθε φορά που τρέχω το πρόγραμμα νέα νούμερα πως το κάνω με
Κώδικας: Επιλογή όλων
a = input('Δώσε το α')
;
1 Linux: Μέτριος ┃ Προγραμματισμός: Καθόλου ┃ Αγγλικά: Προχωρημένος
2 Ubuntu Gnome τελευταία έκδοση
3 Intel Core i3 CPU M 370 2.40GHz ‖ RAM 3819 MiB ‖ Acer Aspire 5742G
4 NVIDIA Corporation Device [10de:0df1] (rev a1)
5 eth0: Broadcom NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01) ⋮ wlan0: Atheros Inc. AR9287 Wireless Network Adapter (PCI-Express) [168c:002e] (rev 01)
yodan000
saintTUX
saintTUX
 
Δημοσιεύσεις: 1681
Εγγραφή: 12 Ιαν 2010, 00:32
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 15 Νοέμ 2010, 23:23

yodan000 έγραψε:a = input('Δώσε το α')

Θέλεις νούμερο (integer); Όπως λέμε a = 1;
Το raw_input δίνει συμβολοσειρές(strings). Αν θέλεις αριθμό, τότε χρησιμοποιείς το int():
Κώδικας: Επιλογή όλων
a = input('Δώσε το α')
b = int(a)

είτε:
Κώδικας: Επιλογή όλων
a = int(input('Δώσε το α'))
Κύπριος; Κόπιασε στο 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: Τα πάντα για την Python

Δημοσίευσηαπό yodan000 » 16 Νοέμ 2010, 16:27

α ευχαριστώ...
1 Linux: Μέτριος ┃ Προγραμματισμός: Καθόλου ┃ Αγγλικά: Προχωρημένος
2 Ubuntu Gnome τελευταία έκδοση
3 Intel Core i3 CPU M 370 2.40GHz ‖ RAM 3819 MiB ‖ Acer Aspire 5742G
4 NVIDIA Corporation Device [10de:0df1] (rev a1)
5 eth0: Broadcom NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01) ⋮ wlan0: Atheros Inc. AR9287 Wireless Network Adapter (PCI-Express) [168c:002e] (rev 01)
yodan000
saintTUX
saintTUX
 
Δημοσιεύσεις: 1681
Εγγραφή: 12 Ιαν 2010, 00:32
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό yodan000 » 17 Νοέμ 2010, 17:43

Κώδικας: Επιλογή όλων
#!/usr/bin/python
# Filename: keyword_only.py

def total(initial=5, *numbers, vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count

print(total(10, 1, 2, 3, vegetables=50))
print(total(10, 1, 2, 3))
# Raises error because we have not supplied a default argument value for 'vegetables'
τι ακριβώς σημαίνει αυτό;
1 Linux: Μέτριος ┃ Προγραμματισμός: Καθόλου ┃ Αγγλικά: Προχωρημένος
2 Ubuntu Gnome τελευταία έκδοση
3 Intel Core i3 CPU M 370 2.40GHz ‖ RAM 3819 MiB ‖ Acer Aspire 5742G
4 NVIDIA Corporation Device [10de:0df1] (rev a1)
5 eth0: Broadcom NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01) ⋮ wlan0: Atheros Inc. AR9287 Wireless Network Adapter (PCI-Express) [168c:002e] (rev 01)
yodan000
saintTUX
saintTUX
 
Δημοσιεύσεις: 1681
Εγγραφή: 12 Ιαν 2010, 00:32
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό yodan000 » 17 Νοέμ 2010, 17:50

επίσης τι σημαίνει αυτό;
Κώδικας: Επιλογή όλων
Συμβολοσειρές τεκμηρίωσης (DocStrings)

Η Python έχει ένα θαυμάσιο χαρακτηριστικό που ονομάζεται συμβολοσειρές τεκμηρίωσης (documentation strings) και συνήθως αναφέρεται με τη συντομογραφία DocStrings. Οι συμβολοσειρές τεκμηρίωσης είναι ένα σπουδαίο εργαλείο που πρέπει να χρησιμοποιείτε διότι βοηθάει να τεκμηριώσετε το πρόγραμμα καλύτερα και έτσι γίνεται πιο εύκολα κατανοητό. Το εντυπωσιακό είναι ότι μπορούμε να πάρουμε επιστροφή τη συμβολοσειρά τεκμηρίωσης από μια συνάρτηση για παράδειγμα, ενώ το πρόγραμμα πραγματικά τρέχει!

Παράδειγμα:

#!/usr/bin/python
# Filename: func_doc.py

def printMax(x, y):
'''Prints the maximum of two numbers.

Oι δύο τιμές πρέπει να είναι ακέραιοι αριθμοί.'''
x = int(x) # μετέτρεψε σε ακέραιους αριθμούς αν είναι δυνατόν
y = int(y)

if x > y:
print(x, 'is maximum')
else:
print(y, 'is maximum')

printMax(3, 5)
print(printMax.__doc__)

Έξοδος:

$ python func_doc.py
5 is maximum
Prints the maximum of two numbers.

Οι δύο τιμές πρέπει να είναι ακέραιοι αριθμοί.

Πώς δουλεύει:

Mία συμβολοσειρά στην πρώτη λογική γραμμή της συνάρτησης είναι η συμβολοσειρά τεκμηρίωσης για αυτή τη συνάρτηση. Σημειώστε ότι οι συμβολοσειρές τεκμηρίωσης εφαρμόζονται και στα αρθρώματα (modules) και στις κλάσεις (classes), όπως θα μάθουμε στα αντίστοιχα κεφάλαια.

Η σύμβαση που ακολουθείται για μια συμβολοσειρά τεκμηρίωσης είναι μια συμβολοσειρά πολλών γραμμών, όπου η πρώτη γραμμή αρχίζει με ένα κεφαλαίο γράμμα και τελειώνει με μια τελεία. Κατόπιν η δεύτερη γραμμή είναι κενή και ακολουθεί η τρίτη γραμμή που έχει κάθε λεπτομερή εξήγηση. Προτείνεται να ακολουθείτε ακριβώς αυτή τη σύμβαση για όλες τις στοιχειοσειρές τεκμηρίωσης που αφορούν όλες τις μη τετριμμένες συναρτήσεις (non-trivial functions).

Μπορούμε να έχουμε πρόσβαση στη συμβολοσειρά τεκμηρίωσης της συνάρτησης printMax χρησιμοποιώντας το ιδιοχαρακτηριστικό (ονομασία που ανήκει σε) __doc__ (σημειώστε τις διπλές κάτω παύλες) της συνάρτησης. Θυμηθείτε όμως ότι η Python αντιμετωπίζει τα πάντα σαν αντικείμενα, και αυτό συμπεριλαμβάνει και τις συναρτήσεις. Θα μάθουμε περισσότερα για τα αντικείμενα στο κεφάλαιο για τις κλάσεις.

Εάν έχετε χρησιμοποιήσει την help() στην Python, τότε έχετε δει ήδη την χρήση των συμβολοσειρών τεκμηρίωσης. Αυτό που κάνει η help() είναι να φέρνει το ιδιοχαρακτηριστικό __doc__ της συνάρτησης και να το εμφανίζει με ένα καλοφτιαγμένο τρόπο. Mπορείτε να το δοκιμάσετε στην παραπάνω συνάρτηση αρκεί να συμπεριλάβουμε την help(printMax) στο πρόγραμμά μας. Θυμηθείτε να πατήσετε το q για κλείσετε τη help.

Μερικά αυτοματοποιημένα εργαλεία μπορούν να ανακτήσουν την τεκμηρίωση από το πρόγραμμά σας με αυτόν τον τρόπο. Συνεπώς συνιστάται να χρησιμοποιείτε συμβολοσειρές τεκμηρίωσης σε κάθε μη τετριμμενη συνάρτηση που γράφετε. Η εντολή pydoc που συνοδεύει την Python λειτουργεί παρόμοια με τη help() χρησιμοποιώντας τις docstrings.
[edit]
1 Linux: Μέτριος ┃ Προγραμματισμός: Καθόλου ┃ Αγγλικά: Προχωρημένος
2 Ubuntu Gnome τελευταία έκδοση
3 Intel Core i3 CPU M 370 2.40GHz ‖ RAM 3819 MiB ‖ Acer Aspire 5742G
4 NVIDIA Corporation Device [10de:0df1] (rev a1)
5 eth0: Broadcom NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01) ⋮ wlan0: Atheros Inc. AR9287 Wireless Network Adapter (PCI-Express) [168c:002e] (rev 01)
yodan000
saintTUX
saintTUX
 
Δημοσιεύσεις: 1681
Εγγραφή: 12 Ιαν 2010, 00:32
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 17 Νοέμ 2010, 20:40

Στο μέλλον να σε παρακαλέσω να αναφέρεις και το σύνδεσμο από πού βρίσκεις τον κώδικα που δίνεις. :)

yodan000 έγραψε:
Κώδικας: Επιλογή όλων
#!/usr/bin/python
# Filename: keyword_only.py

def total(initial=5, *numbers, vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count

print(total(10, 1, 2, 3, vegetables=50))
print(total(10, 1, 2, 3))
# Raises error because we have not supplied a default argument value for 'vegetables'
τι ακριβώς σημαίνει αυτό;


Αυτό νομίζω δουλεύει με python3. Τα initial=5, *numbers, vegetables λέγονται arguments του def total.
- Κάποια arguments είναι υποχρεωτικά και δεν έχουν default/προεπιλεγμένη τιμή -- αυτό είναι το vegetables.
- Κάποια δεν είναι υποχρεωτικά και έχουν default/προεπιλεγμένη τιμή -- αυτό είναι το initial με default τιμή τον αριθμό 5.
- Το αστεράκι μπροστά στο argument "*numbers" σημαίνει ένα ή περισσότερα arguments. Τα arguments του numbers θα μπουν σε λίστα (list) την οποία το πρόγραμμα «μετράει».

Το παράδειγμα που έδωσες δε δουλεύει με python2. Πρέπει να χρησιμοποιήσεις το python3. Και κανονικά θα σύστηνα να βάλεις με σειρά προτεραιότητας τα σημαντικά arguments, αυτά που δεν έχουν προεπιλεγμένη τιμή και πρέπει ο προγραμματιστής να θέσει όταν καλεί το total. Έτσι το σωστό κατά την άποψη μου θα ήταν:

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
# Filename: keyword_only.py

def total(vegetables, *numbers, initial=5):
count = initial
for number in numbers:
count += number
count += vegetables
return count


To def total() προσθέτει τους αριθμούς που δίνεις ως arguments. Έτσι έχουμε:

Κώδικας: Επιλογή όλων
print(total())

Δίνει αποτέλεσμα error -- πρέπει να θέσεις την υποχρεωτική τιμή του vegetables.

Κώδικας: Επιλογή όλων
print(total(1))

Δίνει αποτέλεσμα 6 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Δεν έθεσες την τιμή του argument numbers (οπόταν 0) ούτε του initial (προεπιλεγμένη τιμή 5). Συνοψίζοντας: 1+0+5 = 6

Κώδικας: Επιλογή όλων
print(total(1,2))

Δίνει αποτέλεσμα 8 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Έθεσες την τιμή του argument numbers (οπόταν 2), δεν έθεσες το initial (προεπιλεγμένη τιμή 5). Συνοψίζοντας: 1+2+5 = 8

Κώδικας: Επιλογή όλων
print(total(1,2,3))

Δίνει αποτέλεσμα 11 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Έθεσες την τιμή του argument numbers (οπόταν 2 + 3), δεν έθεσες το initial (προεπιλεγμένη τιμή 5). Συνοψίζοντας: 1+2+3+5 = 11

Κώδικας: Επιλογή όλων
print(total(1,2,5,initial=7))

Δίνει αποτέλεσμα 15 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Έθεσες την τιμή του argument numbers (οπόταν 2 + 5), έθεσες το initial (οπόταν 7). Συνοψίζοντας: 1+2+5+7 = 15

Κώδικας: Επιλογή όλων
print(total(1,2,5,initial=7))

Δίνει αποτέλεσμα 15 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Έθεσες την τιμή του argument numbers (οπόταν 2 + 5), έθεσες το initial (οπόταν 7). Συνοψίζοντας: 1+2+5+7 = 15

Κώδικας: Επιλογή όλων
print(total(1,initial=7))

Δίνει αποτέλεσμα 8 -- έθεσες την υποχρεωτική τιμή vegetables ως 1. Δεν έθεσες την τιμή του argument numbers (οπόταν 0), έθεσες το initial (οπόταν 7). Συνοψίζοντας: 1+7 = 8
Κύπριος; Κόπιασε στο 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
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron