Επισκέπτης Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 Καλησπέρα παιδιά,είμαι στο 1ο έτος και κάνω python και εχω δύο ασκήσεις που με πεδεύουν πολύ και θα ήθελα την βοήθεια σας !Η πρώτη είναι:Μια συνάρτηση average η οποία θα δέχεται οποιονδήποτε αριθμό από ακέραιους και να υπολογίζει το μέσο όρο τους.Η δεύτερη:Μια συνάρτηση η οποία παίρνει σαν όρισμα μία λίστα, κι έναν ακέραιο n και θα επιστρέφει μία λίστα πλειάδων, όπου η κάθε μία θα περιέχει n συνεχόμενους ακέραιους.Σημείωση: Για την αποφυγή παρεξηγήσεων, όταν το όρισμα είναι [1,4,1,5,9] και το n = 3 το αποτέλεσμα πρέπει να είναι [(1,4,1),(5,9, )].Προσπαθώ να τις λύσω αλλα δεν ..
bazinga13 Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 Αν δεν τους δωσεις κατι δεν θα σου δωσουν τιποτα :-) 1
Ilias95 Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 Ε δεν μας λες τίποτα όμως.Η δήλωση της πρώτης για να έχεις variable length argument list θα είναι έτσι: def average(*args): Και ότι δώσεις σαν παράμετρο στην average θα αποθηκευτεί στην λίστα args.Στην δεύτερη μπορείς να κάνεις ένα loop με τα στοιχεία της πρώτης, έχοντας κάποιον δείκτη για να βλέπεις την θέση σου στην λίστα και χρησιμοποιώντας κατάλληλα τον τελεστή modulo (%) θα επιτύχεις αυτό που ζητάει η άσκηση. Εναλλακτικά την 2η μπορείς να την κάνεις και με slicing στην python αλλά δεδομένου ότι μάλλον διδάσκουν αλγοριθμική ίσως να μην είναι η λύση που θέλει να δει.Τι σκέφτηκες και τι έκανες εσύ;
Επισκέπτης Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 Για την 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=0l=[]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--------------Vivliothikesa)def average(*a): sum=0 for i in a: sum=sum+i print(i) c=sum/2 return sumprint("----ARXI PRWTIS SINARTISIS----")average(1,2,3,4,5)average(input("Dwse arithmo-> "),input("Dwse arithmo-> "))print©print("----TELOS PRWTIS SINARTISIS----")
Ilias95 Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 1. Χρησιμοποίησε code tags.2. Για την πρώτη το c = sum / 2 σε τι χρησιμεύει; Επίσης γιατί επιστρέφεις το sum, αφού θες να επιστρέψεις το average;3. Για 2η αρχικά ακολούθα την εκφώνηση και κάνε μια συνάρτηση με 2 ορίσματα.
Επισκέπτης Δημοσ. 23 Νοεμβρίου 2014 Δημοσ. 23 Νοεμβρίου 2014 Βλακια για το sum/2 .. αν μπορει καποιος να μου κανει καποιες διορθωσεις και να με συμβουλεψει εχω κατσει πανω απο ωρα στην καθε μια και δεν μπορω , κολλησα
DeltaLover Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 Μην μπλέκεις με 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)
Επισκέπτης Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 Επειδη ειναι απλές για καποιον που ξερει μπορει να μου τις λυσει και να μου τις εξηγησει ? γιατι ετσι οπως τα γραφετε δεν τα καταλαβαινω :Ρ
DeltaLover Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 η λυση βρισκεται στις δυο functions οπως ακριβως στις εγραψα παραπανω... Οπως βλεπεις, καθε μια αποτελειται απο ακριβως μια γραμμη. Τρεξε το προγραμματακι οπως το βλεπεις και θα καταλαβεις..
zynif Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 def average(mylist): if len(mylist)>0: #αν η λιστα έχει μήκος μεγαλύτερο από 0 έχει δηλαδή στοιχεία #τοτε άθροισε τα με την built-in συνάρτηση sum και διαίρεσε με το μήκος της για να πάρεις την μέση τιμή return sum(mylist) / len(mylist) else: return 0
ALLisCHAOS Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 DeltaLover ο τρόπος σου δεν είναι κ ο κατάλληλος για πρωτάρη, και μόνο που δεν αλλάζεις γραμμή μετά τα if,else κλπ τον σκοτώνεις...
DeltaLover Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 Αν θελεις να περασεις τα 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))
Επισκέπτης Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 Ναι μαλλον δεν καταλαβατε την πρεπει να κανω αυτο ξερω να το κανω αν δεινω εγω τον αριθμο και το μεγεθος που θελω να μου κανει την καθε πλιαδα το θεμα ειναι οτι πρεπει να μου τα δινει ο χρηστης δηλαδη να δινω αριθμους να τους αποθηκευει σε λιστα μετα την λιστα να την κανει πλιαδα και τελος να χωριζει την πλιαδα αναλογα με το n που θα δωσει ο χρηστης και αν εχει μεινει ας πουμε 1 αριθμος για την πλιαδα και εχει δωσει ο χρηστης για n=4 η τελευτεα πλιαδα θα πρεπει να ειναι ετσι (1,' ',' ',' ') Οσο για την αλλη συναρτηση που ειναι για ξεχωριστη ασκηση θελει κατι τετοιο def average(*a): sum=0 for i in a: sum=sum+i print(i) c=sum/length return sumaverage(input("Dwse arithmo-> "),input("Dwse arithmo-> ")) Δηλαδη να δεχετε αριθμους αλλα με ορισμα το *a Δεν ξερω αν καταλαβατε που ακριβως δυσκολευομαι ---------------------------------------------------------------------------- Download: PYTHONΑσκηση 5 υποερωτηματα a,d
DeltaLover Δημοσ. 24 Νοεμβρίου 2014 Δημοσ. 24 Νοεμβρίου 2014 (επεξεργασμένο) Δεν χρειαζεσαι το 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)))] Επεξ/σία 24 Νοεμβρίου 2014 από DeltaLover
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα