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

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

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

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

Δημοσίευσηαπό pmav99 » 08 Σεπ 2011, 01:08

ΕΔΩ η απάντηση
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

Δημοσίευσηαπό Ilias95 » 08 Σεπ 2011, 11:57

pmav99 έγραψε:ΕΔΩ η απάντηση

Βέβαια παίρνω Errno 111 και όχι Errno 10061 αν και δεν ξέρω αν έχει μεγάλη σημασία. Έψαξα και τα δύο.
Δυστυχώς οι απαντήσεις περισσότερο με μπέρδεψαν.
Βρήκα κάποιες λύσεις, αλλά είτε χρειάζονταν mail username και id (το οποίο φυσικά και θέλω αν αποφύγω) είτε δουλεύουν μόνο για gmail (το οποίο πάλι δεν με εξυπηρετεί).
Από την άλλη βρήκα και αυτό:
Spoiler: show
It's because you haven't opened the port you are trying to connect to, nothing is listening there. If you're trying to connect to a web or ftp server, start it first. If you're trying to connect to another port, you need to write a server application too.

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

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

Δημοσίευσηαπό medigeek » 08 Σεπ 2011, 14:04

Βρήκα κάτι που αντί smtp, χρησιμοποιεί sendmail: http://effbot.org/pyfaq/how-do-i-send-m ... script.htm
Δεν το δοκίμασα όμως :)
Κύπριος; Κόπιασε στο 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 » 08 Σεπ 2011, 14:16

medigeek έγραψε:Βρήκα κάτι που αντί smtp, χρησιμοποιεί sendmail: http://effbot.org/pyfaq/how-do-i-send-m ... script.htm
Δεν το δοκίμασα όμως :)

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

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

Δημοσίευσηαπό Ilias95 » 08 Σεπ 2011, 14:27

Μια ακόμα απορία θέλοντας να δημιουργήσω ένα πακέτο.

Έχω διαβάσει ότι αν δημιουργήσεις έναν φάκελο και μέσα βάλεις ένα αρχείο __init__.py τότε αυτόματα δηλώνεται ότι ο φάκελος περιέχει αρθρώματα python.
Διμηουργώ κάτι σαν το παρακάτω:
Spoiler: show
Κώδικας: Επιλογή όλων
boo/
|
+--__init__.py
|
+--module1.py
|
+--far/
|
+--__init__.py
|
+--module2.py


Όμως κάνοντας import το module2 στο module1 παίρνω imporError.
Μου ξεφεύγει κάτι;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό Ilias95 » 08 Σεπ 2011, 18:32

Ilias95 έγραψε:Μια ακόμα απορία θέλοντας να δημιουργήσω ένα πακέτο.

Έχω διαβάσει ότι αν δημιουργήσεις έναν φάκελο και μέσα βάλεις ένα αρχείο __init__.py τότε αυτόματα δηλώνεται ότι ο φάκελος περιέχει αρθρώματα python.
Διμηουργώ κάτι σαν το παρακάτω:
Spoiler: show
Κώδικας: Επιλογή όλων
boo/
|
+--__init__.py
|
+--module1.py
|
+--far/
|
+--__init__.py
|
+--module2.py


Όμως κάνοντας import το module2 στο module1 παίρνω imporError.
Μου ξεφεύγει κάτι;


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

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

Δημοσίευσηαπό medigeek » 08 Σεπ 2011, 21:35

Ilias95 έγραψε:
Ακριβώς το ίδιο σφάλμα.


Δοκίμασε στο τερματικό:
Κώδικας: Επιλογή όλων
echo "This will go into the body of the mail." | mail -s "Hello world" you@youremailid.com

Στείλε το στο δικό σου email και κοίταξε (και στο spam) αν πήρες email.
Κύπριος; Κόπιασε στο 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 » 08 Σεπ 2011, 22:07

medigeek έγραψε:
Ilias95 έγραψε:
Ακριβώς το ίδιο σφάλμα.


Δοκίμασε στο τερματικό:
Κώδικας: Επιλογή όλων
echo "This will go into the body of the mail." | mail -s "Hello world" you@youremailid.com

Στείλε το στο δικό σου email και κοίταξε (και στο spam) αν πήρες email.


Αρχικά δεν είχα το mail εγκατεστημένο. Οπότε είχα 2 επιλογές. Να εγκαταστήσω το heirloom-mailx ή το mailutils.
Πρώτα εγκατέστησα το heirloom-mailx και δοκιμάζοντας την εντολή μου είπε απλά ότι το mail δεν στάλθηκε.
Ύστερα εγκατέστησα το mailutils και στο configuration κατά την εγκατάσταση άφησα τις default ρυθμίσεις.
Μόλις ολοκληρώθηκε η εγκατάσταση ξαναδοκίμασα και δεν πήρα καμία έξοδο. Έλεγξα το e-mail μου, αλλά τίποτα.

Όμως το σφάλμα από τον python κώδικα πλέον άλλαξε σε:
Spoiler: show
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "test4.py", line 13, in <module>
s.send_message(msg)
File "/usr/lib/python3.2/smtplib.py", line 771, in send_message
rcpt_options)
File "/usr/lib/python3.2/smtplib.py", line 738, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'χχχχχ@yahoo.gr': (550, b'5.1.1 <χχχχχ@yahoo.gr>: Recipient address rejected: yahoo.gr')}
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό parenthesis » 16 Σεπ 2011, 15:20

Ποστάρω λοιπόν κι εγώ την πρώτη μου απόπειρα σε python.
Πρόκειται για έναν converter που μετασχηματίζει έναν δοθέντα αριθμό οποιασδήποτε βάσης στη βάση που ζητά ο χρήστης (από 2 μέχρι 36).

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

def convertToBase(toBase, n):
foo = ''

while (n > 0):
x = n%toBase
if (x >= 10):
foo = chr(x + 55) + foo
n = n//toBase
else:
foo = str(x) + foo
n = n//toBase
return foo

num = input('Enter the number you want to convert : ')
base = int(input('Enter the base of the number : '))

new_base = int(input('Now enter the base you want the number to convert to : '))

temp = int(num, base)
print('Decimal number : ', temp)
new_num = convertToBase(new_base, temp)
print('Number in base -', new_base, ' is :', new_num)


Ποστάρω και την - επίσης πρώτη μου - απόπειρα να προσθέσω γραφικό περιβάλλον :

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

from tkinter import *
from tkinter import ttk

def clear_all():
number.set('')
base.set('')
new_base.set('')
new_number.set('')

number_entry.focus()

pass

def vanish(*args):
t.destroy()
clear_all()

def convertToBase(toBase, n):
foo = ''

while (n > 0):
x = n%toBase
if (x >= 10):
foo = chr(x + 55) + foo
n = n//toBase
else:
foo = str(x) + foo
n = n//toBase
return foo

def convert(*args):
try:
num = number.get()
b = int(base.get())
new_b = int(new_base.get())

temp = int(num, b)
new_num = convertToBase(new_b, temp)

new_number.set(new_num)
except ValueError:
global t
t = Toplevel(root)
t.title("Oops!")
tcont = ttk.Label(t, text="Please enter all data required and make sure that base is [2, 36]")
tcont.grid(column=0, row=0, pady=25, padx=25)
b = ttk.Button(t, text="OK", command=vanish)
b.grid(column=0, row=1, pady=25, padx=25)

pass

########

root = Tk()
root.title("Base Converter")

mainframe = ttk.Frame(root, padding="12 12 12 12", width=300, height=400)

num_msg = ttk.Label(mainframe, text='Enter the number : ')
base_msg = ttk.Label(mainframe, text='Enter the base of the number : ')
new_base_msg = ttk.Label(mainframe, text='Enter the base to convert to : ')
res_msg = ttk.Label(mainframe, text='Result : ')

#image = PhotoImage(file='Calc.png')
#img = ttk.Label(mainframe, image=image)

number = StringVar()
number_entry = ttk.Entry(mainframe, textvariable=number)
base = StringVar()
base_entry = ttk.Entry(mainframe, textvariable=base)
new_base = StringVar()
new_base_entry = ttk.Entry(mainframe, textvariable=new_base)

conv = ttk.Button(mainframe, text='Convert', command=convert)
conv.pack()

clear = ttk.Button(mainframe, text='Clear All', command=clear_all)

new_number = StringVar()
result = ttk.Label(mainframe, textvariable=new_number)

mainframe.grid(column=0, row=0, sticky=(N, S, E, W))
num_msg.grid(column=0, row=0, pady=5, padx=5)
base_msg.grid(column=0, row=1, pady=5, padx=5)
new_base_msg.grid(column=0, row=2, pady=5, padx=5)
res_msg.grid(column=0, row=3, pady=5, padx=5)
result.grid(column=1, row=3, pady=5, padx=5, sticky=(E, W))
number_entry.grid(column=1, row=0, pady=5, padx=5, sticky=(E, W))
base_entry.grid(column=1, row=1, pady=5, padx=5, sticky=(E, W))
new_base_entry.grid(column=1, row=2, pady=5, padx=5, sticky=(E, W))
clear.grid(column=1, row=4, pady=10, padx=5)
conv.grid(column=2, row=4, pady=10, padx=5)
#img.grid(column=2, row=0, padx= 20, rowspan=3)

root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
mainframe.columnconfigure(0, weight=3)
mainframe.columnconfigure(1, weight=3)
mainframe.columnconfigure(2, weight=3)
mainframe.rowconfigure(0, weight=1)
mainframe.rowconfigure(1, weight=1)
mainframe.rowconfigure(2, weight=1)
mainframe.rowconfigure(3, weight=1)
mainframe.rowconfigure(4, weight=1)

root.bind('<Return>', convert)

number_entry.focus()

root.mainloop()


Αυτά. Οποιαδήποτε διόρθωση/πρόταση δεκτή! ;)
Τελευταία επεξεργασία από parenthesis και 19 Σεπ 2011, 03:04, έχει επεξεργασθεί 1 φορά/ες συνολικά
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

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

Δημοσίευσηαπό pmav99 » 16 Σεπ 2011, 16:45

Νομίζω ότι ο αλγόριθμος έχει ένα θεματάκι (infinite loop) όταν το toBase είναι 1. Βάλε ένα
Κώδικας: Επιλογή όλων
assert (toBase > 1), "toBase must be greater than 1!"

το data validation κακό ποτέ δεν έκανε ;)

Μπορείς να το γράψεις λίγο πιο απλά ετσι.
Κώδικας: Επιλογή όλων
if (x >= 10):
foo = chr(x + 55) + foo
else:
foo = str(x) + foo
n = n//toBase

ακόμα και έτσι (one liner) αλλά είναι αρκετά πιο ιδιωματικό
Κώδικας: Επιλογή όλων
foo = chr(x + 55) + foo if (x >= 10) else str(x) + foo
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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