Μάθημα 3 - Ασκήσεις

...ασύγχρονα μαθήματα python

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό clepto » 24 Αύγ 2011, 17:19

για compiler και γενικά πρόγραμμα κοίτα το geany
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: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό Qdata » 24 Αύγ 2011, 18:01

Τις λύσεις μπορείς να τις δεις εδώ για να καταλάβεις: viewtopic.php?f=55&t=6057&p=60970#p60970

Ερώτηση 3:
Μην χρησιμοποιείς το:
Κώδικας: Επιλογή όλων
import msvcrt
msvcrt.getch()

Στην python καλύτερα μπορείς να βάλει απλώς το παρακάτω:
Κώδικας: Επιλογή όλων
input()


---------------------------

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


Στο παραπάνω η πρώτη γραμμή χρειάζεται ενώ η δεύτερη είναι απλώς ένα σχόλιο.Η πρώτη ονομάζετε γραμμή shebang.Το #! δεν αντιλαμβάνεται ως σχόλιο από την Python αλλά περιμένει μετά από αυτό να δηλωθεί η τοποθεσία ενός προγράμματος.Αυτό δηλώνει πως το πρόγραμμα μας θα πρέπει να εκτελεστεί από αυτό το διερμηνευτεί όταν έρθει η ώρα της εκτέλεσής του.Διάβασε καλύτερα την σελίδα 15 του βιβλίου στην παράγραφο "Πως δουλεύει"

---------------------------

Εδώ αυτό που μου έρχετε στο μυαλο είναι το false (ψευδής)=0 και true (αληθής)=1 αλλά δεν ξέρω.... :@


Ναι, σωστά.

---------------------------

learne/hack έγραψε:Ερώτηση 6
Και εδώ επίσης γ*****... :@ όπως και στο 4 & 5.... :@ :( κοιτάω και το βιβλίο.... :geek: αλλά τίποτα.. :@ :( :(
Τι εννοεί : Δείξτε 2 απλά παραδείγματα ατέρμων βρόγχου ( forever loop ) ;;;;; Μπορεί κάποιος σας παρακαλώ πάρα πάρα πολύ να μου εξηγήσει..;; :/ ;(


Εννοεί μια άπειρη επανάληψη.Πάρε παράδειγμα τον παρακάτω κώδικα:
Κώδικας: Επιλογή όλων
x = 10
while x == 10:
    print(x) #θα τυπώνει χωρίς σταματημό το x μιας και δεν πρόκειται το x να αλλάξει τιμή ποτέ.
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό midkin » 13 Ιουν 2014, 03:05

Καλημέρες!

Γιατί δεν μου λειτουργεί ρε παιδιά;
Πατάω ως επιλογή το 1 και μου λέει:
Traceback (most recent call last):
File "C:\python\askisi10mathima3.py", line 26, in <module>
main()
File "C:\python\askisi10mathima3.py", line 25, in main
input_check()
File "C:\python\askisi10mathima3.py", line 12, in input_check
print('-', tuple[0],'-')
TypeError: 'type' object is not subscriptable



Κώδικας: Επιλογή όλων
#Filename: askisi10mathima3.py

def menu():
    tuple=('1st choice', '2nd choice', '3rd choice', 'Type 4 to close the program')
    for i in tuple:
        print(i)
   
def input_check():
    while True:
        entry = input()
        if entry == '1':
            print('-', tuple[0], '-')
        elif entry == '2':
            print('-', tuple[1], '-')
        elif entry == '3':
            print('-', tuple[2], '-')
        elif entry =='4':
            print('Thank you for using my program.')
            break
        else:
            print('WARNING: Bad command')

def main():
    menu()
    input_check()
main()
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό midkin » 13 Ιουν 2014, 03:13

Όχι ρε φίλεεεεεεεεεεεεεε!!!!!!!!!!!!!!!
Το βρήκα μόνος μου!!!!
Θυμήθηκα τα περί εμβέλειας μεταβλητών από το βιβλίο!!! (Είπα πως το βρήκα ΜΟΝΟΣ ΜΟΥ;;;;)
Τροποιήσα την menu ως εξής και δούλεψε!!!
Κώδικας: Επιλογή όλων
def menu():
    tuple=('1st choice', '2nd choice', '3rd choice', 'Type 4 to close the program')
    global tuple
    for i in tuple:
        print(i)
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό Ilias95 » 13 Ιουν 2014, 14:19

Ωραία και τώρα ώρα να το ξανά-τροποποιήσεις. :P

Δεν ξέρω αν το αναφέρει καθόλου στο βιβλίο αλλά οι global μεταβλητές είναι κάτι που προσπαθούμε να αποφεύγουμε πάντα στον προγραμματισμό. Να προτιμάς να περνάς τις τιμές που θες σαν παραμέτρους στις συναρτήσεις γιατί έτσι μπορείς να ελέγχεις από που έρχεται μια τιμή πότε αλλάζει κτλ. Με τις global δεν βγάζεις άκρη και γι' αυτό χρησιμοποιούνται πολύ σπάνια και για συγκεκριμένους σκοπούς.

Αυτό που έγραψες παραπάνω είναι πολύ καλύτερα να γίνει:
Κώδικας: Επιλογή όλων
def menu(choices):
    for i in choices:
        print(i)

def input_check(choices):
    while True:
        entry = input()
        if entry == '1':
            print('-', choices[0], '-')
        elif entry == '2':
            print('-', choices[1], '-')
        elif entry == '3':
            print('-', choices[2], '-')
        elif entry =='4':
            print('Thank you for using my program.')
            break
        else:
            print('WARNING: Bad command')

def main():
    _tuple = ('1st choice', '2nd choice', '3rd choice', 'Type 4 to close the program')
    menu(_tuple)
    input_check(_tuple)

main()


Παρατήρησε ότι μετέφερα την tuple στην main και την περνάω σαν όρισμα στην menu() και στην input_check() που την χρειάζονται.

Επίσης θα παρατήρησες ότι άλλαξα το όνομα της από tuple σε _tuple. Αυτό το έκανα γιατί η tuple είναι δεσμευμένη λέξη στην pyhon και μάλιστα είναι συνάρτηση. Πάντα να αποφεύγεις να χρησιμοποιήσεις δεσμευμένα ονόματα όπως list, dict, def, if κτλ. γιατί θα σου δημιουργηθούν «περίεργα» προβλήματα που πιθανόν να δυσκολεύεσαι να τα εντοπίσεις κιόλας:

Κώδικας: Επιλογή όλων
>>> a = (1, 2, 3)
>>> list(a)
[1, 2, 3]
>>> print(list)
<class 'list'>
>>> list = 12
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> print(list)
12
>>>


Επίσης για να μην επαναλαμβάνεις κώδικα μπορείς να κάνεις κάτι ακόμα ωραίο.
Το:
Κώδικας: Επιλογή όλων
        entry = input()
        if entry == '1':
            print('-', choices[0], '-')
        elif entry == '2':
            print('-', choices[1], '-')
        elif entry == '3':
            print('-', choices[2], '-')
        elif entry =='4':
            print('Thank you for using my program.')
            break
        else:
            print('WARNING: Bad command')


Να το κάνεις:
Κώδικας: Επιλογή όλων
        entry = int(input())
        if 0 < entry < 4:
            print('-', choices[entry-1], '-')
        elif entry == 4:
            print('Thank you for using my program.')
            break
        else:
            print('WARNING: Bad command')


Με την συνάρτηση int() μετατρέπεται το string σε integer αν αυτό είναι δυνατόν. Πως να αντιμετωπίσεις τις περιπτώσεις που δεν γίνεται η μετατροπή θα δεις στο κεφάλαιο με τις Exceptions. Δηλαδή τώρα το πρόγραμμα θα δουλεύει μόνο αν δίνει αριθμούς απ' το πληκτρολόγιο.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό midkin » 13 Ιουν 2014, 15:11

Κώδικας: Επιλογή όλων
entry = int(input())
        if 0 < entry < 4:
            print('-', choices[entry-1], '-')
        elif entry == 4:
            print('Thank you for using my program.')
            break
        else:
            print('WARNING: Bad command')


Καλή φάση αυτό...
αν και σκέφτηκα να παίξω με int(input) αλλά έτρεξα το πρόγραμμα και μου έβγαζε σφάλμα με strings... Ήθελα το πρόγραμμα πιο ολοκληρομένο!
Όχι πως σκέφτηκα το:
Κώδικας: Επιλογή όλων
if 0 < entry < 4:

αλλά ενδεχόμενως να το έκανα με μία for και να έβαζα ξεχωριστά τα 4 και else...

Μία ερώτηση από το επόμενο μάθημα...
Γιατί μερικές μεταβλητές τις χρησιμοποιούναι ως __name__, __version__ κλπ;

Υ.Γ. Πάντως όσον αφορά τη global, δεν βρίσκω το λόγο να μη τη χρησιμοποιώ από τη στιγμή που υπάρχει μέσα στην python! Θεωρώ πως η χρήση των global, nonlocal είναι συγκεκριμένη και δεν νομίζω πως μπερδεύει!
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό Ilias95 » 13 Ιουν 2014, 22:55

midkin έγραψε:Μία ερώτηση από το επόμενο μάθημα...
Γιατί μερικές μεταβλητές τις χρησιμοποιούναι ως __name__, __version__ κλπ;

Δεν καταλαβαίνω ποια ακριβώς είναι η απορία σου.
Κάποιες απ' αυτές τις μεταβλητές παίρνουν τιμή αυτόματα κατά την εκτέλεση:
Κώδικας: Επιλογή όλων
>>> print(__name__)
__main__
>>>


midkin έγραψε:Υ.Γ. Πάντως όσον αφορά τη global, δεν βρίσκω το λόγο να μη τη χρησιμοποιώ από τη στιγμή που υπάρχει μέσα στην python! Θεωρώ πως η χρήση των global, nonlocal είναι συγκεκριμένη και δεν νομίζω πως μπερδεύει!

https://www.google.gr/?gfe_rd=cr&ei=qlO ... ls+are+bad
Τους τίτλους δες μόνο. :)

Δεν καταλαβαίνεις το πρόβλημα αυτή τη στιγμή επειδή δεν έχεις γράψει προγράμματα μεγαλύτερα από 10-20 σειρές. Όταν πας να γράψεις πιο πολύπλοκα προγράμματα θα δεις ότι με τις global γίνεται χαμός και δεν βγάζεις άκρη.

Το ότι υπάρχουν στην python δεν λέει κάτι. Μπορεί να φανούν χρήσιμες υπό συνθήκες.
Πάντως και το goto υπήρχε στην java και το αφαίρεσαν. Στην C υπάρχει ακόμα. Για ρώτα κάποιον που γράφει σε C να σου πει τη γνώμη του για το πόσο συχνά πρέπει να χρησιμοποιείται. :P

Το nonlocal δεν το έχω χρησιμοποιήσει ποτέ σε κανένα πρόγραμμα γιατί ποτέ δεν χρησιμοποίησα nested functions και δεν βρίσκω και τον λόγο να το κάνω. Οι περισσότερες γλώσσες δεν το επιτρέπουν καν.

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

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

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό midkin » 14 Ιουν 2014, 00:00

Ilias95 έγραψε:Δεν καταλαβαίνω ποια ακριβώς είναι η απορία σου.
Κάποιες απ' αυτές τις μεταβλητές παίρνουν τιμή αυτόματα κατά την εκτέλεση:
Κώδικας: Επιλογή όλων
>>> print(__name__)
__main__
>>>

Γιατί αυτή η μεταβλιτή __name__ δεν συμβολίζεται ως name..
Σε ένα πρόγραμμα στο βιβλίο που το χρησιμοποιεί μετέπειτα ως module, δημιουργεί τη μεταβλητή __version__, γιατί όχι version;
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 3 - Ασκήσεις

Δημοσίευσηαπό Ilias95 » 14 Ιουν 2014, 17:08

Convention είναι απλά. Έτσι δηλώνεις συνήθως meta-information.
Πχ. τα meda-data από ένα πρόγραμμα μου: https://github.com/Ilias95/FF-Multi-Con ... _init__.py
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Προηγούμενη

Επιστροφή στο Μαθήματα python