Σελίδα 1 από 2

Άσκηση σε Python

ΔημοσίευσηΔημοσιεύτηκε: 07 Ιαν 2013, 01:46
από Knoxd
Καλησπέρα και καλή χρονιά σε όλη την ομάδα!! Ευτυχισμένο το νέο έτος!

Όπως λέω και στο θέμα έχω μια άσκηση στην 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, αλλά αυτό που δεν μπορώ να καταλάβω έιναι πως θα το χρησιμοποιήσω μετά....
Δεν θέλω να μου δώσει κάποιος απλά την απάντηση, θέλω να καταλάβω πως γίνεται ακριβώς μιας και σπουδάω το συγκεκριμένο αντικείμενο. ;)

Re: Άσκηση σε Python

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


Αυτό που κάνεις είναι να φτιάξεις π.χ. 3 worker threads (αν έχεις διπύρηνο επεξεργαστή), όπου θα τρέχουν την isprime() για συγκεκριμένες τιμές.
Και η συνάρτηση που θα καλεί τα νήματα θα συγκεντρώνει τα αποτελέσματα και στο τέλος θα τα εμφανίζει.

Re: Άσκηση σε Python

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

Re: Άσκηση σε Python

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


Πράγματι, κάπως έτσι. Δηλαδή, ο έλεγχος για το αν ένας αριθμός είναι πρώτος θα προκύπτει από εργασία που θα γίνεται σε thread, και το βασικό πρόγραμμα θα καταγράφει τα αποτελέσματα της εκτέλεσης κάθε thread σε πίνακα.

Re: Άσκηση σε Python

ΔημοσίευσηΔημοσιεύτηκε: 07 Ιαν 2013, 17:56
από Knoxd
Ωραία θα το δοκιμάσω και θα σου πω. Για να πάρω τα αποτελέσματα θα τα περνάω σε ένα αρχείο, το οποίο θα το δημιουργώ εκείνη την ώρα.

Re: Άσκηση σε Python

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

Re: Άσκηση σε Python

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


Υπάρχουν διάφοροι τρόποι υλοποίησης. Κάτι που θα σε βοηθήσει είναι να γράψεις περιγραφικά έναν τρόπο υλοποίησης. Αν ο τρόπος βγάζει νόημα, τότε μπορεί να υλοποιηθεί.
Δοκίμασε διάφορα σενάρια υλοποίησης, διότι το να δοκιμάζεις διάφορα σημαίνει ότι μαθαίνεις.

Re: Άσκηση σε Python

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

Re: Άσκηση σε Python

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


Υπάρχει υλικό όπως http://techmyway.wordpress.com/2012/04/ ... -and-code/
που περιγράφει πως με ίνες (threads) να υπολογίσεις τους αριθμούς Fibonacci.
Εξακολούθησε να προσπαθείς ώστε να γίνει κτήμα σου η χρήση thread στη Python.

Re: Άσκηση σε Python

ΔημοσίευσηΔημοσιεύτηκε: 08 Ιαν 2013, 21:51
από Knoxd
Σε ευχαριστώ πάρα πολύ Σίμο για όλη τη βοήθεια!! Μ'άρεσε πάρα πολύ η python από τότε που την ξεκίνησα και θέλω να συνεχίσω να ασχολούμαι με τη συγκεκριμένη γλώσσα, έχω κατεβάσει και βιβλίο για την ανάπτυξη παιχνιδιών στην python.. Αλλά είμαι έν όψη εξεταστικής οπότε αναγκαστικά θα πρέπει να περιμένει λίγο.. Θα συνεχίσω να το ψάχνω το θέμα και θα postάρω για οτιδήποτε νεώτερο. Και πάλι ευχαριστώ!