DeVilMaYcRyGR Δημοσ. 12 Νοεμβρίου 2018 Δημοσ. 12 Νοεμβρίου 2018 Την καλησπέρα μου, Αν και δεν έχει και πολύ νόημα τουλάχιστον για τον αρχικό στόχο μου. Θα ήθελα βοήθεια για να καταφέρω να βγάλω εν τέλη κάτι ασκήσεις. Η μια έχει ως εξής: Αλγόριθμος ταξινόμησης φυσαλίδας (bubble sort) Διαβάζει ακέραιο N από πληκτρολόγιο Δημιουργεί λίστα L, N θέσεων με ψευδοτυχαίους αριθμούς στο διάστημα [1, 100] Εφαρμόζει αλγόριθμο ταξινόμησης φυσαλίδας για ταξινομήσει λίστας κατ’ αύξουσα σειρά Εμφάνιση ταξινομημένης λίστας Υπόδειξη: Χρησιμοποιήστε τη μέθοδο περιγραφής λίστας (list comprehension) Για λίστα L με Ν θέσεις (zero-indexed άρα ο δείκτης του τελευταίου στοιχείου είναι Ν-1) υλοποιήστε τον αλγόριθμο φυσαλίδας με βάση τον ψευδοκώδικα που δίνεται παρακάτω: Για i από 0 μέχρι και Ν-2 Για j από 0 μέχρι και Ν-2-i αν L[j+1] < L[j] : αντιμετάθεσε L[j] με L[j+1] και ο κώδικας που έχω γράψει είναι ο παρακάτω import random as rn N = int(input('Δώσε έναν ακέραιο : ')) L = [rn.randint(1,100) for k in range(0,N+1)] for i in range(0,N-2): for j in range(0,N-2-i): if L[j+1] < L[j]: L[j], L[j+1] = L[j+1],L[j] print (L) Ξέρω ότι κάπου πρέπει να σφηνώσω ένα Ν+1 για να μπορεί το τελευταίο αποτέλεσμα της λίστας να είναι shorted αλλά ότι και να δοκίμασα έφαγα άκυρο. Καμιά ιδέα
DeVilMaYcRyGR Δημοσ. 12 Νοεμβρίου 2018 Μέλος Δημοσ. 12 Νοεμβρίου 2018 Γιατί το ζητάει αν δεις από πάνω η άσκηση. Λέει για 8 λεπτά πριν, DeVilMaYcRyGR είπε Για i από 0 μέχρι και Ν-2 Για j από 0 μέχρι και Ν-2-i αν L[j+1] < L[j] : αντιμετάθεσε L[j] με L[j+1]
pmav99 Δημοσ. 12 Νοεμβρίου 2018 Δημοσ. 12 Νοεμβρίου 2018 (επεξεργασμένο) Βάλε τα indexes μόνος σου και θα το βρεις με τη μία. Επίσης πόσα στοιχεία έχει η L; Επεξ/σία 12 Νοεμβρίου 2018 από pmav99
DeVilMaYcRyGR Δημοσ. 12 Νοεμβρίου 2018 Μέλος Δημοσ. 12 Νοεμβρίου 2018 12 λεπτά πριν, pmav99 είπε Βάλε τα indexes μόνος σου και θα το βρεις με τη μία. Επίσης πόσα στοιχεία έχει η L; τι εννοείς να βάλω τα indexes??τι φράση index την έχω δει συνήθως for index,i in range (0,10) πχ αν εννοείς κάτι τέτοιο να το ψάξω. Η L όσα γουστάρεις ανάλογα τι θα εισάγεις στην Ν
k33theod Δημοσ. 13 Νοεμβρίου 2018 Δημοσ. 13 Νοεμβρίου 2018 (επεξεργασμένο) Τα λάθη σου είναι αυτά που εντοπίσαν και οι άλλοι for i in range(0,N-2): for j in range(0,N-2-i): Αυτό θα έπρεπε να είναι for i in range(len(L)-1):#Εδώ μπορείς αντί len(L) να χρησιμοποιήσεις το N με προσοχή όμως λόγω του παρακάτω for j in range(len(L)-1-i): και στο list comprehension παράγεις λίστα με μήκος μεγαλύτερο του N για να κάνεις λίστα με n στοιχεία γράφεις απλά for k in range(n) Δες και την range https://docs.python.org/3/library/functions.html#func-range Καλό είναι να εντοπίζεις τέτοια λογικά λάθη μόνος σου όπως σε οδήγούν και οι άλλες απαντήσεις γιατί θα τα συναντάς συνέχεια. Ο debuger είναι ο βοήθός σου. Επεξ/σία 13 Νοεμβρίου 2018 από k33theod 1
DeVilMaYcRyGR Δημοσ. 14 Νοεμβρίου 2018 Μέλος Δημοσ. 14 Νοεμβρίου 2018 22 ώρες πριν, k33theod είπε Τα λάθη σου είναι αυτά που εντοπίσαν και οι άλλοι for i in range(0,N-2): for j in range(0,N-2-i): Αυτό θα έπρεπε να είναι for i in range(len(L)-1):#Εδώ μπορείς αντί len(L) να χρησιμοποιήσεις το N με προσοχή όμως λόγω του παρακάτω for j in range(len(L)-1-i): και στο list comprehension παράγεις λίστα με μήκος μεγαλύτερο του N για να κάνεις λίστα με n στοιχεία γράφεις απλά for k in range(n) Δες και την range https://docs.python.org/3/library/functions.html#func-range Καλό είναι να εντοπίζεις τέτοια λογικά λάθη μόνος σου όπως σε οδήγούν και οι άλλες απαντήσεις γιατί θα τα συναντάς συνέχεια. Ο debuger είναι ο βοήθός σου. Δεν διαφωνώ ότι πρέπει να βρίσκω τα θέματα και να τα επιλύω αλλά εκτός και αν εννοείται κάτι άλλο ή έχω καταλάβει κάτι λάθος στην άσκηση το παρακάτω ζητάει να είναι έτσι. Αν το βάλω με Ν-1 βγαίνει ή με το len(L) όπως πολύ ωραία ανέφερες. Αυτός όμως σου λέει να χρησιμοποιήσω αυτό σαν συνθήκη άρα θα έβγαινε λάθος γιατί δεν ακολούθησα αυτό που λέει η άσκηση. Το έχει κάνει βασικά για να μπερδεύει... for i in range(0,N-2): for j in range(0,N-2-i):
k33theod Δημοσ. 14 Νοεμβρίου 2018 Δημοσ. 14 Νοεμβρίου 2018 Μπορείς να το κάνεις και με Ν-2, θα είναι βέβαια εν γνώση σου ότι το τελευταίο στοιχείο της λίστας είναι όχι shorted. Οι περισσότεροι άλλωστε short αλγόριθμοι είναι του τύπου short(L,p,q)L η λίστα, p ο αρχικός δείκτεις q o τελικός
DeVilMaYcRyGR Δημοσ. 14 Νοεμβρίου 2018 Μέλος Δημοσ. 14 Νοεμβρίου 2018 Ναι εν γνώση μου βγαίνει το τελευταίο στοιχείο not sorted αλλά υπάρχει κάποιος τρόπος μετά να διορθωθεί αυτό . Το παιδεύω ακόμα...
k33theod Δημοσ. 14 Νοεμβρίου 2018 Δημοσ. 14 Νοεμβρίου 2018 Είναι πιθανό να μην είναι μια παγίδα επίτηδες αλλά ένα τυπογραφικό λάθος. Αν είναι επίτηδες και θέλει εξτρα κώδικα για ταξινόμηση μπορείς να το κάνεις με ένα for loop
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα