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

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

Δημοσ.

Την καλησπέρα μου,

Αν και δεν έχει και πολύ νόημα τουλάχιστον για τον αρχικό στόχο μου. Θα ήθελα βοήθεια για να καταφέρω να βγάλω εν τέλη κάτι ασκήσεις.

Η μια έχει ως εξής:

Αλγόριθμος ταξινόμησης φυσαλίδας (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 αλλά ότι και να δοκίμασα έφαγα άκυρο. Καμιά ιδέα

Δημοσ.

Γιατί το ζητάει αν δεις από πάνω η άσκηση. Λέει για 

8 λεπτά πριν, DeVilMaYcRyGR είπε

Για i από 0 μέχρι και Ν-2
   Για j από 0 μέχρι και Ν-2-i
      αν L[j+1] < L[j] :
         αντιμετάθεσε L[j] με L[j+1]

 

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

Βάλε τα indexes μόνος σου και θα το βρεις με τη μία.

Επίσης πόσα στοιχεία έχει η L;



Επεξ/σία από pmav99
Δημοσ.
12 λεπτά πριν, pmav99 είπε

Βάλε τα indexes μόνος σου και θα το βρεις με τη μία.

Επίσης πόσα στοιχεία έχει η L;



τι εννοείς να βάλω τα indexes??τι φράση index την έχω δει συνήθως for index,i in range (0,10) πχ αν εννοείς κάτι τέτοιο να το ψάξω. Η L όσα γουστάρεις ανάλογα τι θα εισάγεις στην Ν

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

Τα λάθη σου είναι αυτά που εντοπίσαν και οι άλλοι

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 είναι ο βοήθός σου.

Επεξ/σία από k33theod
  • Like 1
Δημοσ.
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):

Δημοσ.

Μπορείς να το κάνεις και με Ν-2, θα είναι βέβαια εν γνώση σου ότι το τελευταίο στοιχείο της λίστας είναι όχι shorted. Οι περισσότεροι άλλωστε short αλγόριθμοι είναι του τύπου

short(L,p,q)L η λίστα, p ο αρχικός δείκτεις q o τελικός

Δημοσ.

Ναι εν γνώση μου βγαίνει το τελευταίο στοιχείο not sorted αλλά υπάρχει κάποιος τρόπος μετά να διορθωθεί αυτό . Το παιδεύω ακόμα... 

Δημοσ.

Είναι πιθανό να μην είναι μια παγίδα επίτηδες αλλά ένα τυπογραφικό λάθος.

Αν είναι επίτηδες και θέλει εξτρα κώδικα για ταξινόμηση μπορείς να το κάνεις με ένα for loop

 

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

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

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

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

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

Σύνδεση

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

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