Άσκηση σε Python

...ασύγχρονα μαθήματα από τους guru της κοινότητας

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

Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 07 Ιαν 2013, 01:46

Καλησπέρα και καλή χρονιά σε όλη την ομάδα!! Ευτυχισμένο το νέο έτος!

Όπως λέω και στο θέμα έχω μια άσκηση στην Python και αυτή είναι η ακόλουθη:
Να γραφεί ένα πρόγραμμα το οποίο να υπολογίζει πρώτους αριθμούς, το οποίο το έκανα και είναι το ακόλουθο:
Κώδικας: Επιλογή όλων
import time
def isprime(n):
    if n == 2: 
        return 1
    if n%2 ==0:
        return 0
    max = n**0.5 + 1
    i=3
    while i <= max:
        if n % i == 0:
            return 0
        i+=2
    return 1
primenubers = []
print "Please give the maximum number"
endnum = input()
start = time.time()
for i in range(endnum):
    if isprime(i) == 1:
        primenubers.append(i)
print primenubers
print "Elapsed Time: %s" % (time.time() - start)

Αυτό που ζητείται τώρα ειναι να μετατρέψω το συγκεκριμένο πρόγραμμα, ώστε να υπολογίζει τους πρώτους αριθμούς με τη χρήση νημάτων(threads),
γνωρίζω οτι πρέπεί να εισάγω τα νήματα στην αρχή του προγράμματος με την εντολή from threading import Thread, αλλά αυτό που δεν μπορώ να καταλάβω έιναι πως θα το χρησιμοποιήσω μετά....
Δεν θέλω να μου δώσει κάποιος απλά την απάντηση, θέλω να καταλάβω πως γίνεται ακριβώς μιας και σπουδάω το συγκεκριμένο αντικείμενο. ;)
Τελευταία επεξεργασία από Qdata και 07 Ιαν 2013, 14:06, έχει επεξεργασθεί 1 φορά/ες συνολικά
Αιτία: Προσθήκη [code] tag ώστε να μην χάνετε η μορφωποίηση του κώδικα.
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό simosx » 07 Ιαν 2013, 02:11

Knoxd έγραψε:Αυτό που ζητείται τώρα ειναι να μετατρέψω το συγκεκριμένο πρόγραμμα, ώστε να υπολογίζει τους πρώτους αριθμούς με τη χρήση νημάτων(threads),
γνωρίζω οτι πρέπεί να εισάγω τα νήματα στην αρχή του προγράμματος με την εντολή from threading import Thread, αλλά αυτό που δεν μπορώ να καταλάβω έιναι πως θα το χρησιμοποιήσω μετά....


Αυτό που κάνεις είναι να φτιάξεις π.χ. 3 worker threads (αν έχεις διπύρηνο επεξεργαστή), όπου θα τρέχουν την isprime() για συγκεκριμένες τιμές.
Και η συνάρτηση που θα καλεί τα νήματα θα συγκεντρώνει τα αποτελέσματα και στο τέλος θα τα εμφανίζει.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 07 Ιαν 2013, 13:31

Ευχαριστώ για την γρήγορη απάντηση και εαν κατάλαβα καλά η κλήση της συνάρτησης isprime() θα γίνει με τον ακόλουθο τρόπο:
t = Thread(target=isprime, args=(i,))
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό simosx » 07 Ιαν 2013, 14:30

Knoxd έγραψε:Ευχαριστώ για την γρήγορη απάντηση και εαν κατάλαβα καλά η κλήση της συνάρτησης isprime() θα γίνει με τον ακόλουθο τρόπο:
t = Thread(target=isprime, args=(i,))


Πράγματι, κάπως έτσι. Δηλαδή, ο έλεγχος για το αν ένας αριθμός είναι πρώτος θα προκύπτει από εργασία που θα γίνεται σε thread, και το βασικό πρόγραμμα θα καταγράφει τα αποτελέσματα της εκτέλεσης κάθε thread σε πίνακα.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 07 Ιαν 2013, 17:56

Ωραία θα το δοκιμάσω και θα σου πω. Για να πάρω τα αποτελέσματα θα τα περνάω σε ένα αρχείο, το οποίο θα το δημιουργώ εκείνη την ώρα.
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 08 Ιαν 2013, 01:26

Από αυτο που μου είπες και από όση ώρα παλεύω και εγώ με την άσκηση έχω καταλήξει ότι το thread πρέπει να μπεί στον έλεγχο (if) αλλά αυτό που δεν μπορώ να καταλάβω είναι πως θα γίνει η σύγκριση;;;;
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό simosx » 08 Ιαν 2013, 02:33

Knoxd έγραψε:Από αυτο που μου είπες και από όση ώρα παλεύω και εγώ με την άσκηση έχω καταλήξει ότι το thread πρέπει να μπεί στον έλεγχο (if) αλλά αυτό που δεν μπορώ να καταλάβω είναι πως θα γίνει η σύγκριση;;;;


Υπάρχουν διάφοροι τρόποι υλοποίησης. Κάτι που θα σε βοηθήσει είναι να γράψεις περιγραφικά έναν τρόπο υλοποίησης. Αν ο τρόπος βγάζει νόημα, τότε μπορεί να υλοποιηθεί.
Δοκίμασε διάφορα σενάρια υλοποίησης, διότι το να δοκιμάζεις διάφορα σημαίνει ότι μαθαίνεις.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 08 Ιαν 2013, 12:27

Δοκίμασα αρκετά πράγματα μέχρι τώρα απλά δεν γνωρίζω επ'ακριβώς τη σύνταξη της εντολής (t = Thread (target = function_name ,agrs = ())) και προσπαθώ να λύσω την άσκηση κοιτώντας παραδείγματα που υπάρχουν ήδη.. Έχεις να μου προτείνεις κάποιο site για να ψάξω περισσότερο;;
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό simosx » 08 Ιαν 2013, 15:00

Knoxd έγραψε:Δοκίμασα αρκετά πράγματα μέχρι τώρα απλά δεν γνωρίζω επ'ακριβώς τη σύνταξη της εντολής (t = Thread (target = function_name ,agrs = ())) και προσπαθώ να λύσω την άσκηση κοιτώντας παραδείγματα που υπάρχουν ήδη.. Έχεις να μου προτείνεις κάποιο site για να ψάξω περισσότερο;;


Υπάρχει υλικό όπως http://techmyway.wordpress.com/2012/04/ ... -and-code/
που περιγράφει πως με ίνες (threads) να υπολογίσεις τους αριθμούς Fibonacci.
Εξακολούθησε να προσπαθείς ώστε να γίνει κτήμα σου η χρήση thread στη Python.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Άσκηση σε Python

Δημοσίευσηαπό Knoxd » 08 Ιαν 2013, 21:51

Σε ευχαριστώ πάρα πολύ Σίμο για όλη τη βοήθεια!! Μ'άρεσε πάρα πολύ η python από τότε που την ξεκίνησα και θέλω να συνεχίσω να ασχολούμαι με τη συγκεκριμένη γλώσσα, έχω κατεβάσει και βιβλίο για την ανάπτυξη παιχνιδιών στην python.. Αλλά είμαι έν όψη εξεταστικής οπότε αναγκαστικά θα πρέπει να περιμένει λίγο.. Θα συνεχίσω να το ψάχνω το θέμα και θα postάρω για οτιδήποτε νεώτερο. Και πάλι ευχαριστώ!
1 Γνώσεις Linux: Μέτριος ┃ Προγραμματισμού: Μέτριος┃ Αγγλικών: Πολύ καλά
2 Ubuntu 14.04 trusty 3.13.0-39-generic 32bit (en_US.UTF-8, XFCE xubuntu), Windows 7
3 Intel Core2 Duo CPU P8600 2.40GHz ‖ RAM 3027 MiB ‖ Quanta 3603 - HP Pavilion dv5 Notebook PC
4 nVidia G96M [GeForce 9600M GT] [10de:0649] {nvidia}
5 eth0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 02) ⋮ wlan0: Intel PRO/Wireless 5100 AGN [Shiloh] Network Connection [8086:4237]
Knoxd
babeTUX
babeTUX
 
Δημοσιεύσεις: 115
Εγγραφή: 03 Φεβ 2011, 17:15
Εκτύπωση

Επόμενο

Επιστροφή στο Το Σχολείο του Φόρουμ - Ασύγχρονα Μαθήματα