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

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

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

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

Δημοσίευσηαπό clepto » 30 Σεπ 2011, 15:22

εντάξει είναι τώρα...αυτό που μένει είναι να το κοιτάξω και να το ενσωματώσω στο πρόγραμμα...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό clepto » 30 Σεπ 2011, 20:13

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

import os.path
import pprint # "Pretty print"
try:
import cPickle as pickle
except ImportError:
import pickle

pickle_file = "crypt.db"
pickle_dict = dict()

# If pickle file exists
if os.path.exists(pickle_file):
with open(pickle_file, "rb") as f:
pickle_dict = pickle.load(f)
else:
f = open('crypt.db','w')
f.close()


def open_write:
name = input("ονομα; ")
pickle_dict["name"] = "name"
with open(pickle_file, "wb") as f:
pickle.dump(pickle_dict, f)
μέχρι στιγμής έχω γράψει αυτό, δεν το έχω δοκιμάσει αλλά κάτι δε μου κάθεται καλά, έχω κάποιο λάθος;
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό Ilias95 » 30 Σεπ 2011, 20:55

Γιατί δεν το τρέχεις; Πάντα θα τρέχεις ότι κάνεις για να διορθώνεις τα λάθη σου και να βγάζεις τα συμπεράσματα σου.

Κατ' αρχάς έχεις συντακτικά λάθη. Οι συναρτήσεις θέλουν στο τέλος δύο παρενθέσεις "()". Επίσης το pickle_dict που ορίζεις στην συνάρτηση open_write() δεν είναι το ίδιο με αυτό που φόρτωσες με το pickle καθώς δεν έχεις δηλώσει ότι θες να είναι το ίδιο. Για να το κάνεις αυτό θα το βάλεις σαν όρισμα στην συνάρτηση έτσι:
Κώδικας: Επιλογή όλων
def open_write(a_dict)

Και όταν τρέξεις την συνάρτηση θα καλέσεις:
Κώδικας: Επιλογή όλων
open_write(pickle_dict)

(Άλλαξε και το όνομα σε κάτι πιο ουσιώδη αν θες.)

Θα πρότεινα ακόμα να δημιουργήσεις δύο χωριστές συναρτήσεις. Μία που να κάνει απλά την αποθήκευση και μία που να κάνει την επεξεργασία του dict. Μέσα στην δεύτερη συνάρτηση θα καλείς την πρώτη ώστε να αποθηκεύονται οι αλλαγές σου.

Τέλος αυτό:
Κώδικας: Επιλογή όλων
else:
f = open('crypt.db','w')
f.close()

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

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

Δημοσίευσηαπό clepto » 30 Σεπ 2011, 22:12

χαζομάρα της στιγμής το τελευταίο... :P
δεν προλάβαινα να το δοκιμάσω για αυτό το έβαλα εδώ...
θα τα κοιτάξω αυτά που είπες αν και να πω την αλήθεια, νιώθω λίγο χαμένος με όλα αυτά....
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 30 Σεπ 2011, 23:12

Αν είσαι αρχάριος στην python, πρώτα κάνε ένα script σε python.
Άσε τα def, τρέξε τα όλα ένα-ένα, όπως θα έκανες σε ένα bash script.

Άμα φτιάξεις το python "script", τότε αρχίζεις και προσθέτεις τα έξτρα def και το οργανώνεις σιγά-σιγά.
Πρώτα κάνε το να δουλέψει. :)
Κύπριος; Κόπιασε στο 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

Δημοσίευσηαπό clepto » 30 Σεπ 2011, 23:24

όταν πατάω 1 δεν κάνει τίποτα
Κώδικας: Επιλογή όλων
#!/bin/python3

import os.path
import pprint # "Pretty print"
try:
import cPickle as pickle
except ImportError:
import pickle

pickle_file = "crypt.db"
pickle_dict = dict()

# If pickle file exists
if os.path.exists(pickle_file):
with open(pickle_file, "rb") as f:
pickle_dict = pickle.load(f)


def save():
pickle.dump(pickle_dict, f) # dump the object to a file
f.close()


def write( a_dict ):
name = input("ονομα; ")
pickle_dict["name"] = "name"
with open(pickle_file, "wb") as f:
pickle.dump(pickle_dict, f)
save()


def delete():
name = input("ονομα; ")
pickle_dict.pop("name")
save()

def menu():
n = input("τι θελετε να κανετε; ")
if n == 1:
write()
elif n == 2:
delete()

menu()
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό pmav99 » 01 Οκτ 2011, 00:07

Σίγουρα δεν κάνει τίποτα? Θα έπρεπε να πετάει exception γιατί...
Διάβασε ξανά τις συναρτήσεις http://docs.python.org/tutorial/control ... -functions
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

Δημοσίευσηαπό Ilias95 » 01 Οκτ 2011, 01:05

Λοιπόν πάλι δεν κατάλαβες σχετικά με τα namespaces.

Πάρε αυτό το παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 50

def func(x):
print('Το x είναι', x)
x = 2
print('Άλλαξα το τοπικό x σε', x)

func(x)
print('Το x είναι ακόμα', x)

Η έξοδος είναι:
Spoiler: show
Κώδικας: Επιλογή όλων
Το x είναι 50
Άλλαξα το τοπικό x σε 2
Το x είναι ακόμα 50

Το ότι το χ μέσα στην συνάρτηση έχει το ίδιο όνομα με το καθολικό χ δεν μας ενδιαφέρει. Μες στην συνάρτηση αρχικά δεν υπάρχει κανένα χ και ύστερα ορίζουμε σαν χ το 2. Το χ μες στην συνάρτηση (και γενικώς κάθε μεταβλητή μέσα σε μια συνάρτηση) ονομάζεται τοπικό χ (ή τοπική μεταβλητή).
Αν θες να ξεκαθαρίσεις ότι το χ μέσα στην συνάρτηση πρόκειται για το καθολικό χ και θες οι αλλαγές που θα κάνεις στο χ της συνάρτησης να ισχύσουν και στο καθολικό χ, πρέπει να χρησιμοποιήσεις την εντολή global.

Παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 50

def func():
global x
print('Το x είναι', x)
x = 2
print('Άλλαξα το καθολικό x σε', x)

func()
print('Η τιμή του x είναι', x)

Έξοδος:
Spoiler: show
Κώδικας: Επιλογή όλων
Το x είναι 50
Άλλαξα το καθολικό x σε 2
Η τιμή του x είναι 2

Τώρα πως περνάμε όρισμα στην συνάρτηση;

Παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 'banana'

def function(z):
print(z)

function(x)
function('apple')

Έξοδος:
Spoiler: show
Κώδικας: Επιλογή όλων
banana
apple

Αυτό που είπαμε πριν είναι να αποφύγεις την χρήση της εντολής global μέσα στις συναρτήσεις.

Οπότε αντί να γράψεις:
Spoiler: show
Κώδικας: Επιλογή όλων
lista = [1, 2, 3, 4]

def a_function():
global lista
for item in lista:
print(item)

a_function()

Θα γράψεις:
Spoiler: show
Κώδικας: Επιλογή όλων
lista = [1, 2, 3, 4]

def a_function(z):
for item in z:
print(item)

a_function(lista)

Τέλος για να το δεις στην πράξη σου δείχνω ένα μέρος του κώδικα σου πως πρέπει να γίνει:
Κώδικας: Επιλογή όλων
import os, pickle

pickle_file = "crypt.db"
pickle_dict = dict()

if os.path.exists(pickle_file):
with open(pickle_file, "rb") as f:
pickle_dict = pickle.load(f)

def save(something_to_save):
pickle.dump(something_to_save, f)
f.close()

def write(file_to_modify, file_to_save_to):
name = input("ονομα; ")
file_to_modify["name"] = "name"
with open(file_to_save_to, "wb") as f:
pickle.dump(file_to_modify, f)
save(file_to_modify)

def menu():
n = input("τι θελετε να κανετε; ")
if n == 1:
write(pickle_dict, pickle_file)

Το υπόλοιπο διόρθωσε το εσύ.

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

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

Δημοσίευσηαπό clepto » 01 Οκτ 2011, 16:25

λοιπόν παιδιά, δεν την παλεύω άλλο :P
δεν το γράφετε εσείς να μου το δώσετε γιατί εγώ παραιτούμε...
μην ρωτήσετε που κολλάω, απλά δεν μπορώ :P
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 01 Οκτ 2011, 16:58

Αμφιβάλλω ότι κάποιος θα σου δώσει ετοιμοπαράδοτο αυτό που θέλεις... :) στο φόρουμ και στον κόσμο του ΕΛΛΑΚ ισχύει μια κινέζικη παροιμία «Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime.»
Δεν είναι ανάγκη να τα κάνεις όλα σήμερα. Διάβασε λίγο, χώνεψε το, δοκίμασε, κάνε τα πειράματα σου και δοκίμασε την επόμενη μέρα. Δε θα γκρεμιστεί τίποτα σε μια μέρα, αλλά μπορεί να θεμελιωθεί η γνώση. :)
Κύπριος; Κόπιασε στο 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
Εκτύπωση

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

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