Ceres Dea έγραψε:
A=[]
A=input("Enter the items of the list:")
n=len(A)
j=0
for i in A:
if x[i]!=0:
j+=1
B[j]=A[i]
for i in range(j+1,n):
B[j]=0
for i in range(0,n):
A[i]=B[i]
Εκανα κατι τετοιο,αλλα κατι δεν παει καλα...
Πρώτον, το x και το B δεν τα έχεις καν δηλώσει. Άρα αν προσπαθήσεις να τρέξεις το πρόγραμμα
θα σου πετάξει error.
Επιπλέον το A το αλλάζει και από λίστα το μετατρέπεις σε συμβολοσειρά.
Λες ότι:
A=[]
A=input("Enter the items of the list:")
Πρώτα αρχικοποιείς μία κενή λίστα. Και μετά λες
Α=input. H input επιστρέφει ένα
string από χαρακτήρες άρα εάν πχ o χρήστης πληκτρολογίσει
1 2 3 το A θα έχει την
τιμή
"1 2 3" και όχι
[1,2,3].
Για να γεμίσεις μία λίστα με αριθμούς κάνεις το εξής:
Α = []
while True:
item = int(input("Δώσε ένα στοιχείο(-1 για τερματισμό):"))
if item == -1:
break
A.append(item)
Δεύτερον, δεν έχεις καταλάβει πως δουλεύει το
for i in A.
To συγκεκριμένο loop περνάει μέσα από
όλα τα στοιχεία της λίστας A και το i κάθε φορά
παίρνει την τιμή του εκάστοτε στοιχείου.
A = [1,2,3]
for variable in A:
print(variable )
Έξοδος:
Πάμε τώρα να δούμε κομμάτι κομμάτι τον κωδικά σου.
Ceres Dea έγραψε:
A=[]
A=input("Enter the items of the list:")
n=len(A)
j=0
for i in A:
if x[i]!=0:
j+=1
B[j]=A[i]
Το
δεν είναι σωστό! Όπως σου εξήγησα πριν, το i δεν είναι ένας ακέραιος αριθμός
που δηλώνει το index αλλά είναι το εκάστοτε στοιχείο της λίστας a. Επιπλέον μάλλον ήθελες να πεις
και για κάποιον λόγο έγγραψες x αντί για A.
Άρα θα έπρεπε να κάνεις κάτι
τέτοιο:
if i != 0:
#do something.
Μόνο το
for i in range( len(A) ):
A[i] != 0
Το i παίρνει ακέραιους αριθμούς από
0 έως μέγεθος_λίστας - 1 τους οποίους
μπορείς να χρησιμοποιήσεις ως index για να πάρεις στοιχεία μέσα από μία λίστα.
Την λίστα B δεν την δήλωσες πουθενά! Έπρεπε στην αρχή του κωδικά σου να είχες:
Επιπλέον για να προσθέσεις ένα νέο στοιχείο στο τέλος της λίστας κάνεις το εξής:
new_item = 2
B.append(new_item)
Δεν χρειάζεται να κάνεις αυτό με το
B[j] που σκέφτηκες το οποίο το έκανες και λάθος.
Πάντως αν κατάλαβα σωστά αυτό που προσπάθησες να κάνεις ήταν να πάρεις όλα τα μη μηδενικά στοιχεία της λίστας σου και να τα βάλεις στην αρχή της νέας λίστας. Εγώ σου είπα πρώτα τα μηδενικά στοιχεία και μετά τα μη μηδενικά.
Συγνώμη δικό μου λάθος. Νόμιζα ότι ήθελες τα μηδενικά στοιχεία να είναι στην αρχή της λίστας αλλά είπες στο τέλος.
Ceres Dea έγραψε:
for i in range(j+1,n):
B[j]=0
for i in range(0,n):
A[i]=B[i]
Εντελώς λάθος λογική σε αυτό το σημείο. Εκτός του ότι δεν έχεις δηλώσει την B αλλά ούτε το μέγεθος της που κανονικά θα πρέπει να έχει το ίδιο μέγεθος με την A , το
j+1 θα σου δώσει εδώ μια τιμή εκτός ορίων της B άρα το loop δεν θα τρέξει και θα σου πετάξει index out of range error.
Το επόμενο loop παίρνει κάθε στοιχείο της B και το βάζει στην A. Καλό εάν θέλεις η αλλαγές που έκανες
να υπάρχουν στον πίνακα A. Άλλα όπως είπα πολλές φορές το Β δεν το αρχικοποίησες.
Ρώτα με κάτι που δεν καταλαβαίνεις και από αυτά που σε είπα αλλά και από αυτά που σκέφτηκες μόνος σου.
Τώρα που σε είπα κάποια από τα λάθη σου προσπάθησε να το ξανά φτιάξεις. Είσαι αρκετά κοντά στην λύση!!!