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

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

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

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

Δημοσίευσηαπό sv1jsb » 29 Ιουν 2011, 19:02

Για την πρώτη απορία δεν γνωρίζω άλλον τρόπο από το φτιάξεις μια δική σου input και να χρησιμοποιήσεις readline.
Κώδικας: Επιλογή όλων

import readline

def input_default(prompt, default):
def startup_hook():
readline.insert_text(default)

readline.set_startup_hook(startup_hook)
try:
return raw_input(prompt)
finally:
readline.set_startup_hook(None)

a=input_default("prompt ","default")
print a


Για την δεύτερη δες εδώ
Μερικά παραδείγματα:
Κώδικας: Επιλογή όλων

"{0:010d}".format(123)
0000000123 (έχει μηδέν μπροστά μέχρι το μέγεθος που του βάλαμε)
"{0:10d}".format(123)
123 (έχει 7 κενά μπροστά αφού του είπαμε να έχει μέγεθος 10)
Programming blog
Γνώσεις ⇛ Linux: Καλά ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 10.04 64bit
Προδιαγραφές ⇛ Phenom II │ 8GB │ 2xATI 5670 │ HD Audio │ TFT 23"
Άβαταρ μέλους
sv1jsb
babeTUX
babeTUX
 
Δημοσιεύσεις: 88
Εγγραφή: 01 Ιουν 2011, 23:50
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 29 Ιουν 2011, 20:57

Ilias95 έγραψε:
1. Μπορώ με κάποιο τρόπο όταν ζητάω εισαγωγή απ' τον χρήστη να εμφανίζω κείμενο προς επεξεργασία;
Δηλαδή αυτό που εννοώ είναι να εμφανίζεται το: "Λειτουργικό: Ubuntu" και η λέξη "Ubuntu" να είναι διαθέσιμη προς επεξεργασία, δηλαδή σβήσιμο των 3 τελευταίων γραμμάτων, επανεγγραφή κτλ...


Κώδικας: Επιλογή όλων
import time
import sys
for i in range(100):
sys.stdout.write("Downloading ... %s%%\r" % (i))
sys.stdout.flush()
time.sleep(1)
Κύπριος; Κόπιασε στο 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

Δημοσίευσηαπό medigeek » 29 Ιουν 2011, 21:31

Χμ.. ενδιαφέρον.. δε δουλεύει σε windows.. :P
Δουλεύει στην κονσόλα, απλά δε δουλεύει στο IDLE του python :)
Κύπριος; Κόπιασε στο 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

Δημοσίευσηαπό Ilias95 » 29 Ιουν 2011, 21:56

Επιτέλους, έτοιμο το πρώτο μου "κανονικό" (ε δεν έχω ξαναγράψει και πάνω από 100 σειρές κώδικα :P ) πρόγραμμα!

Ένα Βιβλίο Διευθύνσεων στο οποίο προσθέτετε, επεξεργάζεστε, διαγράφετε, κατηγοριοποιήτε και προβάλετε επαφές.

Δώστε, για τον κώδικα και την εκτέλεση:
Μεταφέρθηκε: Address Book

Αφού το κάνετε εκτελέσιμο ("chmod +x address_book.py") μπορείτε να το τρέξετε.

Πρόσεξα ώστε να είναι φορητό, αλλά επειδή (ευτυχώς) δεν έχω Windows δεν ξέρω κατά πόσο ισχύει αυτό.
(Αν το δοκιμάσει κάποιος ας μου πει - Συγκεκριμένα δεν είμαι σίγουρος για το αν υπάρχει εντολή clear στα Windows)

Μπορείτε να "παίξετε" όσο θέλετε με τον κώδικα, καθώς και να το επαναδιαθέσετε (λέμε τώρα :lol: :P ) αν θέλετε.
Ελπίζω ότι ο κώδικας είναι ευανάγνωστος (με αρκετά σχόλια) και πιστεύω ότι είναι χρήσιμο για ανάγνωση από αρχάριους.
Εννοείται ότι οποιαδήποτε παρατήρηση/διόρθωση είναι κάτι παραπάνω από ευπρόσδεκτη!

Ευχαριστώ και πάλι για την πολύτιμη βοήθεια που δέχτηκα απ' το φόρουμ, η οποία και συνέβαλε στην δημιουργία της παραπάνω εφαρμογής.
Τελευταία επεξεργασία από Ilias95 και 31 Αύγ 2011, 15:33, έχει επεξεργασθεί 7 φορά/ες συνολικά
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό sv1jsb » 29 Ιουν 2011, 23:40

Ilias95 έγραψε:Επιτέλους, έτοιμο το πρώτο μου "κανονικό" (ε δεν έχω ξαναγράψει και πάνω από 100 σειρές κώδικα :P ) πρόγραμμα!

Ένα Βιβλίο Διευθύνσεων στο οποίο προσθέτετε, επεξεργάζεστε, διαγράφετε, κατηγοριοποιήτε και προβάλετε επαφές.

Δώστε, για τον κώδικα:
Κώδικας: Επιλογή όλων
wget http://dl.dropbox.com/u/33870708/address_book.py

Αφού το κάνετε εκτελέσιμο ("chmod +x address_book.py") μπορείτε να το τρέξετε.

Πρόσεξα ώστε να είναι φορητό, αλλά επειδή (ευτυχώς) δεν έχω Windows δεν ξέρω κατά πόσο ισχύει αυτό.
(Αν το δοκιμάσει κάποιος ας μου πει - Συγκεκριμένα δεν είμαι σίγουρος για το αν υπάρχει εντολή clear στα Windows)

Μπορείτε να "παίξετε" όσο θέλετε με τον κώδικα, καθώς και να το επαναδιαθέσετε (λέμε τώρα :lol: :P ) αν θέλετε.
Ελπίζω ότι ο κώδικας είναι ευανάγνωστος (με αρκετά σχόλια) και πιστεύω ότι είναι χρήσιμο για ανάγνωση από αρχάριους.
Εννοείται ότι οποιαδήποτε παρατήρηση/διόρθωση είναι κάτι παραπάνω από ευπρόσδεκτη!

Ευχαριστώ και πάλι για την πολύτιμη βοήθεια που δέχτηκα απ' το φόρουμ, η οποία και συνέβαλε στην δημιουργία της παραπάνω εφαρμογής.


Πάρα πολύ καλή δουλειά για νέο προγραμματιστή. Έχεις χρησιμοποιήσει τα πάντα. Ορισμένες παρατηρήσεις μόνο.
Όταν γράφεις προγράμματα προσπάθησε να αποφεύγεις την χρησιμοποίηση global μεταβλητών. Καθώς μεγαλώνει ένα πρόγραμμα είναι δύσκολο να παρακολουθήσεις τις μεταβολές σε global μεταβλητές. Προσπάθησε αυτό που θέλεις να χρησιμοποιήσεις να το περνάς σαν όρισμα σε συνάρτηση.
Και αυτές να επιστρέφουν μια τιμή αφού έχουν επεξεργαστεί το όρισμα.
Η python επιστρέφει false αν μια μεταβλητή είναι κενή. Οπότε ο παρακάτω κώδικας σου:
Κώδικας: Επιλογή όλων

global lista_katigoriwn
a = False
b = False
c = False
for obj in lista_katigoriwn:
a = True
if a == True:
print('\nΟι υπάρχουσες κατηγορίες είναι: \n')
for obj in lista_katigoriwn:
print(obj)
else:
print('\nΔεν έχετε δημιουργήσει κατηγορίες.\n')
b = True

μπορεί να γίνει:
Κώδικας: Επιλογή όλων

if lista_katigoriwn:
for obj in lista_katigoriwn:
print(obj)
else:
print('\nΔεν έχετε δημιουργήσει κατηγορίες.\n')

Τέτοιου είδους συμαζέματα αν κάνεις (γιατί χρησιμοποιείς πολλές True, False για τον έλεγχο της ροής) ο κώδικας σου θα δείξει αμέσως καλύτερος.
Στην επόμενη έκδοση του προγράμματος να χρησιμοποιήσεις το SQLObject εργαλείο. Θα σου λύσει τα χέρια με τις αποθηκεύσεις και τις ευρέσεις.
Διάβασε και λίγη θεωρία για databases και κανονικοποίηση αρχείων.
Στην τρίτη έκδοση να το κάνεις γραφικό, είτε σε GTK είτε σε QT.

Συνέχισε την καλή δουλειά.
Programming blog
Γνώσεις ⇛ Linux: Καλά ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 10.04 64bit
Προδιαγραφές ⇛ Phenom II │ 8GB │ 2xATI 5670 │ HD Audio │ TFT 23"
Άβαταρ μέλους
sv1jsb
babeTUX
babeTUX
 
Δημοσιεύσεις: 88
Εγγραφή: 01 Ιουν 2011, 23:50
Εκτύπωση

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

Δημοσίευσηαπό Ilias95 » 30 Ιουν 2011, 02:47

Χαίρομαι που σου άρεσε.

Όντως επιδέχεται αρκετές βελτιώσεις ειδικά στον έλεγχο ροής γιατί τα συγκεκριμένα σημεία του κώδικα είναι λιγάκι δυσανάγνωστα και δύσκολα στην κατανόηση.
Θα ακολουθήσω τις συμβουλές σου για το πως να συνεχίσω, αν και αυτή τη στιγμή δεν έχω ιδέα τι ακριβώς κάνει το SQLObject, ούτε τι είναι η κανονικοποίηση αρχείων ή πως δουλεύεις σε GTK ή QT (θα μάθω όμως :P :geek: :D ). Αν έχεις και συγκεκριμένους οδηγούς/tutorials στο μυαλό σου, θα ήταν χαρά μου αν μου πρότεινες κάποιους απ' αυτούς (και σε pm αν θέλεις). Μόλις ασχοληθώ με δημιουργία γραφικού περιβάλλοντος θα διαβάσω και τον αναλυτικό οδηγό σου για το glade :thumbup: .

Με εκτίμηση,
Ηλίας
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό sv1jsb » 30 Ιουν 2011, 09:20

Το sqobject - http://www.sqlobject.org - (ή το sqlalchemy και άλλα) είναι ένας εύκολος τρόπος να φτιάχνεις και να χρησιμοποιείς βάσεις δεδομένων. Προσφέρουν το interface μεταξύ του προγράμματός σου και της βάσης. Χρησιμοποιείς τις δικές τους κλάσεις και αντικείμενα και αυτά θα πάνε να βάλουν νέα εγγραφή, θα ψάξουν για εγγραφή ή θα την σβήσουν. Ανάλογα την επιλογή του χρήστη. Με αυτόν τον τρόπο επιτυγχάνεις δύο πράγματα. Πρώτο, το πρόγραμμά σου είναι ανεξάρτητο από την βάση που χρησιμοποιείς. Αν ξεκινήσεις με sqlite και στην πορεία δεις ότι προτιμάς την mysql απλώς αλλάζεις την εντολή σύνδεσης, όλες οι υπόλοιπες εντολές παραμένουν οι ίδιες. Δεύτερο, δεν χρησιμοποιείς SQL. Γράφεις μόνο python κώδικα οπότε είναι πιο εύκολη η αποσφαλμάτωση.
Σου έγραψα αυτές τις ιδέες για να διαβάσεις και για άλλα πράγματα. Όπως, πολύ ενδιαφέρον θα ήταν να το κάνεις client/server.
Σιγά, σιγά όμως. Και ένα πράγμα την φορά.
Programming blog
Γνώσεις ⇛ Linux: Καλά ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 10.04 64bit
Προδιαγραφές ⇛ Phenom II │ 8GB │ 2xATI 5670 │ HD Audio │ TFT 23"
Άβαταρ μέλους
sv1jsb
babeTUX
babeTUX
 
Δημοσιεύσεις: 88
Εγγραφή: 01 Ιουν 2011, 23:50
Εκτύπωση

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

Δημοσίευσηαπό pmav99 » 30 Ιουν 2011, 19:27

arkanoid έγραψε:
migf1 έγραψε:Επειδή python δεν γνωρίζω, έχω μια απορία: υπάρχει κάποιος ιδιαίτερος λόγος που το sum υπολογίζεται σε ξεχωριστό loop και όχι μαζί με τα min και max στο αρχικό loop? Αυτή η υλοποίηση κάνει τον διπλάσιο χρόνο να εκτελεστεί!

Σίγουρα η υλοποίηση μου δεν είναι η καλύτερη ή η κομψότερη, αλλά διπλάσιο χρόνο εκτέλεσης από το να ήταν όλα σε μία επανάληψη, δεν κάνει. Και οι δύο υλοποιήσεις είναι O(n), αφού και στις δύο περιπτώσεις για κάθε στοιχείο του πίνακα γίνεται το ίδιο πλήθος ενεργειών, γραμμικό ανάλογα με την είσοδο του αλγόριθμου. Μάλλον δε χρειάζεσαι παραπάνω εξηγήσεις όμως, αφού μιλάς για χρόνους εκτέλεσης θα τα γνωρίζεις αυτά. Πάντως γενικότερα συμφωνώ, στο ότι θα ήταν καλύτερα όλα σε μία επανάληψη, αφού θα ήταν πιο απλός και ευανάγνωστος ο κώδικας.

Δεν έχεις δίκιο. Στις compiled γλώσσες ισχύει αυτό που λες. Στην python κάθε for-loop έχει κάποιο overhead. Μικρό μεν, αλλά μετρήσιμο δε. Δοκίμασε να μετρήσεις τον χρόνο εκτέλεσης βάζοντας τη sum μέσα στο πρώτο loop και θα δεις ότι είναι πιο σύντομο. O πιο εύκολος τρόπος είναι με ipython και timeit)

Σχετικά με τη len(), αν και δεν έκανα μετρήσεις πιστεύω ότι θα είναι πιο γρήγορο από το να το κανεις με custom counter, γιατί ο κώδικας πίσω από τη len είναι σε C και εκτελείται πιο γρήγορα από ότι το for loop σε python.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 30 Ιουν 2011, 19:59

pmav99 έγραψε:
[snip]
Σχετικά με τη len(), αν και δεν έκανα μετρήσεις πιστεύω ότι θα είναι πιο γρήγορο από το να το κανεις με custom counter, γιατί ο κώδικας πίσω από τη len είναι σε C και εκτελείται πιο γρήγορα από ότι το for loop σε python.

Μιας και python δεν γνωρίζω, από τα συμφραζόμενα συμπεραίνω πως υπάρχει πολύ μεγάλη πιθανότητα η len(nums) να μη χρησιμοποιεί καν loop και να είναι O(1). Εννοώ, εφόσον υπάρχει: for i in nums: το βρίσκω παραπάνω από πιθανό το μήκος του nums να φυλάσσεται σε κάποια εσωτερική μεταβλητή όταν πρωτο-ορίζεται, κι η len(nums) απλά να το διαβάζει με τη μια από εκεί. Αν είναι έτσι, σαφώς και συμφέρει.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 30 Ιουν 2011, 22:00

Κύπριος; Κόπιασε στο 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
Εκτύπωση

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

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