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

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

Δημοσ.

παιδιά έχω αυτή την εντολή στην python

s = 0.8 * p[(y-1) % 5]

O p είναι ένας πίνακας 4 γραμμών και 5 στήλων που περιέχει δεκαδικούς αριθμούς. κανονικά εγώ θέλω να βρίσκω την προιγούμενη τιμή του πίνακα πολλαπλασιασμένη με κάπιον αριθμό. Ο compiler όμως μου βγάζει αυτό το σφάλμα

s = 0.8 * p[(y-1) % 5] TypeError: 'float' object is unsubscriptable

Τι φταίει?Είναι η πρώτη φορά που ασχωλούμε με Python και μου φαίνεται αρκετά περίεργη πάντως.

Δημοσ.

Το λαθος σου δεν ειναι στην εντολή που εχεις δώσει. Πόσταρε περισσότερο κώδικα. Λογικα φτιαχνεις λαθος το p, γιατι τετοιο error το βγάζει πχ αν ο p ειναι μονοδιάστατος και γραψεις p[0][1] πχ.

Δημοσ.

το λάθος προφανώς είναι στο y το οποίο θα είναι float

δοκίμασε έτσι

>
s = 0.8 * p[i][int((y-1) % 5)]

φίλε το y είναι ένας μετρητης από μια for που υπάρχει πιο πάνω ( for y in (0,4,): ) αλλά ακόμα και αν όλες τις μεταβλητές τις κάνω νουμερα (και το i και το y δηλαδή) πάλι το ίδιο σφάλμα μου βγαζει(όπως και αν αντιγράψω το δικό σου)...

Δημοσ.

Το λαθος ειναι σίγουρα στην δημιουργία του p. Δειξε μας πως το φτιάχνεις. Αν δωσεις σαν p το παράδειγμα που εδωσες παραπανω δεν βγαζει σφάλμα.

Δημοσ.

To πρόβλημα οφείλεται διότι πας να χειριστείς κάποια μεταβλητή τύπου float ως πίνακα.

Δώσε ένα μεγαλύτερο κομμάτι κώδικα να καταλάβουμε.

Δημοσ.

για να μη μαντεύουμε, δεν δίνεις καλύτερα όλο τον κώδικα να τον δούμε;

 

+1

 

φίλε το y είναι ένας μετρητης από μια for που υπάρχει πιο πάνω ( for y in (0,4,): ) αλλά ακόμα και αν όλες τις μεταβλητές τις κάνω νουμερα (και το i και το y δηλαδή) πάλι το ίδιο σφάλμα μου βγαζει(όπως και αν αντιγράψω το δικό σου)...

 

 

και το i τι τιμές παίρνει?

 

Υ.Γ. τελευταία μαντεψιά!!!

>s = 0.8 * p[int(i)][int((y-1) % 5)]

Δημοσ.

παιδιά έχω αυτή την εντολή στην python

s = 0.8 * p[(y-1) % 5]

 

 

Αν και δεν ξέρω python (δηλάδη αν οι πίνακες είναι zero based):

Όταν y=0; τότε (y-1) % 5 =0

 

Μπορείς να ορίσεις πίνακα στην python νε αυτό τον τρόπο p[1][0] ;

Δημοσ.

Βασικά φίλε μου εδώ:

 

s = 0.8 * p[(y-1) % 5]

προσπαθείς να περάσεις το αποτέλεσμα της πράξης 0.8 * το στοιχείο που βρίσκεται στη θέση (y-1%5), όχι το περιεχόμενο της θέσης y μείον 1 % 5 (δλδ της i εμφωλευμένης λίστας, γιατί έτσι οπως είναι ο πίνακάς σου έχεις 5 λίστες μέσα σε 1).

πχ αν i=3 και y=4 και p[3][4]=5, τότε -> s = 0.8 * p[3][4-1%5] <=> s = 0.8 * p[3][4] , όχι s = 0.8 * 5 = 4 ούτε s = 0.8 * 5-1%5 = 3.95.

Με βάση τα παραπάνω εξήγησέ μας τι προσπαθείς να κάνεις, το range των for για να καταλάβουμε τι γίνεται.

επίσης μια χαρά πανεύκολη είναι η python καθόλου περίεργη, η λογική της σύνταξής της είναι πολύ κοντά σε ψευδογλώσσες, μόνο η διαίρεση με πραγματικούς είναι όντως εκκεντρική στη σύνταξή της.

Δημοσ.

Παιδιά το έλυσα το πρόβλημα,αν και δεν θυμάμε τι έφταιγε τελικά

Ευχαριστώ για την βοήθεια!

 

* το s = 0.8 * p[3][4-1%5] ισούτε με -> s = 0.8 * p[3][3] (δηλαδή πέρνει την τιμή από την προηγούμενη θέση από την λίστα και την πολλαπλασιάζει με 0.8)

** πανέυκολη όπως το πάρει κανείς, γιατί ότι απαιτεί στυχισμένο τον κώδικα αντί της χρήσης {} ή ότι δεν αναγνωρίζει το tab αντίστοιχο με τα κενά, μου φέναιτε αρκετά περίεργο.ίσως είναι μέχρι να την συνηθίσω,θα δίξει.

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

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

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

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

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

Σύνδεση

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

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