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

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

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

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

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

Done! Ευχαριστώ πολύ για τις παρατηρήσεις! :thumbup:

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

def convertToBase(toBase, n):
assert (toBase > 1) and (toBase < 37), "the base to convert to must be [2 - 36]!"

foo = ''

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

try:
num = input('Enter the number you want to convert : ')
base = int(input('Enter the base of the number : '))
assert (base > 2) and (base < 37), "Base must be [2 - 36]!"

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

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

except ValueError:
print("You entered false data!")
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, 17:51

tip : Yπαρχουν 2 ειδών προγράμματα. Αυτά που είναι για να μαθαίνουμε και αυτά που είναι για να χρησιμοποιούμε. Μην ταλαιπωρείσαι με το Ιnput/Οutput στα πρώτα ;)

Αυτό αρκεί για να ελέγxεις το πρόγραμμα σου :P
Κώδικας: Επιλογή όλων
print(convertToBase(new_base, n))


Αν έχεις κέφι φυσικά το unittest είναι ακόμα καλύτερο. Το πρόβλημα βοηθάει κιόλας για testing
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

τι κάνω λάθος; το αρχείο tes.txt βγαίνει κενό, ενώ δεν μου βγάζει κάποιο σφάλμα
Κώδικας: Επιλογή όλων
#!bin/python3
# -*- coding: utf-8 -*-

name = input('δωσε τη λεξη: ')

def crypt_list_write():
f = open('tes.txt', 'w')
f.write(name)
f.close()

def crypt_list_delete():
del name

def menu():
i = int(input('τι θελετε να κανετε: '))
if i == 1:
crypt_list_write()
if i == 2:
crypt_list_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

Δημοσίευσηαπό medigeek » 26 Σεπ 2011, 20:28

Χρησιμοποίησε το "global name" για να καλέσεις τη μεταβλητή name μέσα στα def. :)
http://stackoverflow.com/questions/4233 ... eated-them
Κύπριος; Κόπιασε στο 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

Δημοσίευσηαπό pmav99 » 26 Σεπ 2011, 20:46

Ακόμα καλύτερα απέφυγε τελείως τη χρήση των global μεταβλητών. Καλύτερα να περνάς σε κάθε συνάρτηση τα arguments που απαιτεί για να μην υπάρχουν τέτοιου τύπου απρόβλεπτες συμπεριφορές.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

εννοείς να γίνει έτσι;
Κώδικας: Επιλογή όλων
#!bin/python3
# -*- coding: utf-8 -*-



def crypt_list_write():
name = input('δωσε τη λεξη: ')
f = open('tes.txt', 'w')
f.write(name)
f.close()

def crypt_list_delete():
name = input('δωσε τη λεξη: ')
del name


def menu():
i = int(input('τι θελετε να κανετε: '))
if i == 1:
crypt_list_write()
if i == 2:
crypt_list_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

Δημοσίευσηαπό Ilias95 » 26 Σεπ 2011, 23:06

clepto έγραψε:εννοείς να γίνει έτσι;
Κώδικας: Επιλογή όλων
#!bin/python3
# -*- coding: utf-8 -*-



def crypt_list_write():
name = input('δωσε τη λεξη: ')
f = open('tes.txt', 'w')
f.write(name)
f.close()

def crypt_list_delete():
name = input('δωσε τη λεξη: ')
del name


def menu():
i = int(input('τι θελετε να κανετε: '))
if i == 1:
crypt_list_write()
if i == 2:
crypt_list_delete()

menu()
γιατί δεν πιάνει έτσι...


Τι ακριβώς θες να κάνεις;
ο pmav εννοούσε κάτι σαν:
Κώδικας: Επιλογή όλων
def crypt_list_delete(name):
del name


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

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

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

βασικά τώρα την def crypt_list_write θέλω να δοκιμάσω...
να σας πω τι θέλω να κάνω, θέλω να περνάει μέσα σε ένα αρχείο ονόματα φακέλων, και να έχω την δυνατότητα να τα διαγράφω, να χρησιμοποιήσω το pikle;
ακούω εσείς που ξέρετε...
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 » 26 Σεπ 2011, 23:36

Πρόχειρα έφτιαξα αυτό:

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

file = '/path/of/file'

def write_to_file():
name = input('δωσε τη λεξη: ')
with open(file, mode='a', encoding='utf-8') as a_file:
a_file.write(name + '\n')

def delete_from_file():
name = input('δωσε τη λεξη: ')
text = ''
with open(file, encoding='utf-8') as a_file:
for a_line in a_file:
if name in a_line:
a_line = a_line.replace(name, '')
text += a_line
with open(file, mode='w', encoding='utf-8') as a_file:
a_file.write(text)

def menu():
i = int(input('τι θελετε να κανετε: '))
if i == 1:
write_to_file()
if i == 2:
delete_from_file()

menu()


Κάθε φορά που εκτελείτε η write_to_file(), προσθέτει σε νέα γραμμή το input, ενώ στην delete αν υπάρχει το input το διαγράφει.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

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

Δεν κατάλαβα τι ακριβώς θέλεις να κάνεις. Αν δε σου κάνει αυτό που έγραψε ο Ηλίας, γίνε λίγο πιο αναλυτικός.

Γιατί δουλεύεις κατευθείαν με αρχεία? Θα είναι πολύ πιο αποδοτικό να δουλεύεις με αντικείμενα και όταν τερματίζεται το πρόγραμμα να αποθηκεύονται στο δίσκο. Δηλαδή η crypt_list να είναι μια list στην οποία θα προσθέτεις ή θα αφαιρείς entries και θα έχεις δύο άλλες συναρτήσεις για να αποθηκεύεις στο δίσκο ή να διαβάζεις από αυτόν. Επίσης, έχω την αίσθηση ότι ένα dictionary θα σε εξυπηρετήσει καλύτερα (Ο(1) αναζήτηση, απαγορεύονται τα διπλα entries κτλ).

Από εκεί και περα. Τα αρχεία κειμένου σου επιτρέπουν να αποθηκεύσεις μόνο strings. Τα pickle σου επιτρέπουν να αποθηκεύσεις αντικείμενα. Πχ ένα dictionary, μία list ή ακόμα και μία instance μιας κλάσης.

Αν στο πρόγραμμα σου έχεις σύνθετες δομές δεδομένων τότε το pickle είναι γενικά καλύτερο γιατί δε χρειάζεται να χάσεις χρόνο με το να μετατρέπεις τα δεδομένα σε format που γράφεται και σε format που διαβάζεται αντίστοιχα.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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