Προς το περιεχόμενο

Ασκήσεις Python


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά,
είμαι στο 1ο έτος και κάνω python και εχω δύο ασκήσεις που με πεδεύουν πολύ και θα ήθελα την βοήθεια σας !

Η πρώτη είναι:
Μια συνάρτηση average η οποία θα δέχεται οποιονδήποτε αριθμό από ακέραιους και να υπολογίζει το μέσο όρο τους.

Η δεύτερη:
Μια συνάρτηση η οποία παίρνει σαν όρισμα μία λίστα, κι έναν ακέραιο n και θα επιστρέφει μία λίστα πλειάδων, όπου η κάθε μία θα περιέχει n συνεχόμενους ακέραιους.Σημείωση: Για την αποφυγή παρεξηγήσεων, όταν το όρισμα είναι [1,4,1,5,9] και το n = 3 το αποτέλεσμα πρέπει να είναι [(1,4,1),(5,9, )].

Προσπαθώ να τις λύσω αλλα δεν ..

Δημοσ.

Ε δεν μας λες τίποτα όμως.

Η δήλωση της πρώτης για να έχεις variable length argument list θα είναι έτσι:

def average(*args):

Και ότι δώσεις σαν παράμετρο στην average θα αποθηκευτεί στην λίστα args.

Στην δεύτερη μπορείς να κάνεις ένα loop με τα στοιχεία της πρώτης, έχοντας κάποιον δείκτη για να βλέπεις την θέση σου στην λίστα και χρησιμοποιώντας κατάλληλα τον τελεστή modulo (%) θα επιτύχεις αυτό που ζητάει η άσκηση.

 

Εναλλακτικά την 2η μπορείς να την κάνεις και με slicing στην python αλλά δεδομένου ότι μάλλον διδάσκουν αλγοριθμική ίσως να μην είναι η λύση που θέλει να δει.

Τι σκέφτηκες και τι έκανες εσύ;
 

Δημοσ.

Για την 2η κατι τετοιο σκεφτομουν αλλα κολησα

def pliada(l):
    met=length
    y=0
    while met>n:
        y=y+1
        for i in range (0,n):
            lista[y].append(l)
    lista[y]=tuple(lista[y])
    c=lista[y]
    return lista[y]

print("----ARXI TETARTIS SINARTISIS----")
a=0
l=[]
while a!=-1:
    a=int(input("Dwse arithmo gia tin lista (-1 gia termatismo) -> "))
    if a!=-1:
        l.append(a)
length=len(l)
n=int(input("Dwse arithmo gia sinexomenus akaireous -> "))
print(pliada(l))
print("----TELOS TETARTIS SINARTISIS----")
 


και για την 1η:

 

Mini-Project5
--------------
Vivliothikes
a)
def average(*a):
    sum=0
    for i in a:
        sum=sum+i
        print(i)
    c=sum/2
    return sum

print("----ARXI PRWTIS SINARTISIS----")
average(1,2,3,4,5)
average(input("Dwse arithmo-> "),input("Dwse arithmo-> "))
print©
print("----TELOS PRWTIS SINARTISIS----")
 

Δημοσ.

1. Χρησιμοποίησε code tags.
2. Για την πρώτη το c = sum / 2 σε τι χρησιμεύει; Επίσης γιατί επιστρέφεις το sum, αφού θες να επιστρέψεις το average;
3. Για 2η αρχικά ακολούθα την εκφώνηση και κάνε μια συνάρτηση με 2 ορίσματα.

Δημοσ.

Βλακια για το sum/2 .. αν μπορει καποιος να μου κανει καποιες διορθωσεις και να με συμβουλεψει εχω κατσει πανω απο ωρα στην καθε μια και δεν μπορω , κολλησα

Δημοσ.

Μην μπλέκεις με loops.  Δες τον παρακάτω κώδικα:

def average(l):
    return sum(l) / len(l) if len(l) > 0 else 0

def to_sublists(l, n):
    return [tuple(l[0:n])] + to_sublists(l[n:], n) if n < len(l) else [tuple(l[0:n])]


if __name__ == '__main__':
    x = [2, 5, 3, 18, 2, 1,23]
    print to_sublists(x, 3)
    print average(x)

Δημοσ.

Επειδη ειναι απλές για καποιον που ξερει μπορει να μου τις λυσει και να μου τις εξηγησει ? γιατι ετσι οπως τα γραφετε δεν τα καταλαβαινω :Ρ

Δημοσ.

η λυση βρισκεται στις δυο functions οπως ακριβως στις εγραψα παραπανω...  Οπως βλεπεις, καθε μια αποτελειται απο ακριβως μια γραμμη. Τρεξε το προγραμματακι οπως το βλεπεις και θα καταλαβεις..

Δημοσ.


def average(mylist):
if len(mylist)>0:
#αν η λιστα έχει μήκος μεγαλύτερο από 0 έχει δηλαδή στοιχεία
#τοτε άθροισε τα με την built-in συνάρτηση sum και διαίρεσε με το μήκος της για να πάρεις την μέση τιμή
return sum(mylist) / len(mylist)
else:
return 0

 

Δημοσ.

DeltaLover ο τρόπος σου δεν είναι κ ο κατάλληλος για πρωτάρη, και μόνο που δεν αλλάζεις γραμμή μετά τα if,else κλπ τον σκοτώνεις...

Δημοσ.

Αν θελεις να περασεις τα arguments μεσω args (οπως μου ειπες στο PM) μπορεις ευκολα να το κανεις οπως παρακατω;

 

(Προσεξε, το τελευταιο argument θα πρεπει να ειναι το length του καθε tuple)

 

Οπως λεει ο φιλος παραπανω, σου σπαω το if else για να το καταλαβεις καλυτερα...

 

Tip: Σκεψου πως μπορεις να βελτιωσεις το function αυτο, προσθετωντας exception handling

def to_sublists(*args):
    l, n = list(args[0:-1]), args[-1]
    return [tuple(l[0:n])] + to_sublists(*(l[n:] + [n])) \
        if n < len(l) \
        else [tuple(l[0:n])]


if __name__ == '__main__':
    print (to_sublists(2, 5, 3, 18, 2, 1, 23, 22, 3))
Δημοσ.

Ναι μαλλον δεν καταλαβατε την πρεπει να κανω αυτο ξερω να το κανω αν δεινω εγω τον αριθμο και το μεγεθος που θελω να μου κανει την καθε πλιαδα το θεμα ειναι οτι πρεπει να μου τα δινει ο χρηστης δηλαδη να δινω αριθμους να τους αποθηκευει σε λιστα μετα την λιστα να την κανει πλιαδα και τελος να χωριζει την πλιαδα αναλογα με το n που θα δωσει ο χρηστης και αν εχει μεινει ας πουμε 1 αριθμος για την πλιαδα και εχει δωσει ο χρηστης για n=4 η τελευτεα πλιαδα θα πρεπει να ειναι ετσι (1,' ',' ',' ')

 

Οσο για την αλλη συναρτηση που ειναι για ξεχωριστη ασκηση θελει κατι τετοιο

 

 

def average(*a):
    sum=0
    for i in a:
        sum=sum+i
        print(i)
    c=sum/length
    return sum

average(input("Dwse arithmo-> "),input("Dwse arithmo-> "))

 

Δηλαδη να δεχετε αριθμους αλλα με ορισμα το *a


Δεν ξερω αν καταλαβατε που ακριβως δυσκολευομαι

 

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


File.png Download: PYTHON


Ασκηση 5 υποερωτηματα a,d

Δημοσ. (επεξεργασμένο)

Δεν χρειαζεσαι το loop

 

Ο σωστος, απλος και pythonic τροπος ειναι ο παρακατω:

def average(*args):
    return sum(args) / len(args)

Ο τροπος που παρουσιαζεις:

def average(*a):
    sum=0
    for i in a:
        sum=sum+i
        print(i)
    c=sum/length
    return sum

(εκτος του οτι δεν δουλευει οπως τον παρουσιαζεις γιατυ το length δεν ειναι ορισμενο) λεγεται baby talk και πρεπει να αποφευγεται οσο ειναι δυνατον.. 

 

Οσο για το

(1,',',',')

Δεν ειναι το ιδιο με το

(1,)

Που εγραψες αρχικα.

 

Τα δυο αυτα tuples ειναι τελειως διαφορετικα..  Αν χρειαζεσαι το

(1, ',' , ',')

πολυ απλα πρεπει να αλλαξεις το function που σου εδωσα σε:

def to_sublists(*args):
    l, n = list(args[0:-1]), args[-1]
    return [tuple(l[0:n])] + to_sublists(*(l[n:] + [n])) \
        if n < len(l) \
        else [tuple(l[0:n] + [','] * (n - len(l)))]

Επεξ/σία από DeltaLover

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...