steve62742 Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 παιδιά έχω αυτή την εντολή στην 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 και μου φαίνεται αρκετά περίεργη πάντως.
twiner Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 πώς ορίζεις τον πίνακα p; Εκεί είναι μάλλον το πρόβλημα.
steve62742 Δημοσ. 24 Φεβρουαρίου 2012 Μέλος Δημοσ. 24 Φεβρουαρίου 2012 τι ενωείς?ο πίνακας είναι κάπως έτσι: p=[[1,1,1,1,1], [1,1,1,1,1], [1,1,1,1,1], [1,1,1,1,1]]
bnvdarklord Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 Το λαθος σου δεν ειναι στην εντολή που εχεις δώσει. Πόσταρε περισσότερο κώδικα. Λογικα φτιαχνεις λαθος το p, γιατι τετοιο error το βγάζει πχ αν ο p ειναι μονοδιάστατος και γραψεις p[0][1] πχ.
virxen75 Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 το λάθος προφανώς είναι στο y το οποίο θα είναι float δοκίμασε έτσι > s = 0.8 * p[i][int((y-1) % 5)]
steve62742 Δημοσ. 24 Φεβρουαρίου 2012 Μέλος Δημοσ. 24 Φεβρουαρίου 2012 το λάθος προφανώς είναι στο y το οποίο θα είναι float δοκίμασε έτσι > s = 0.8 * p[i][int((y-1) % 5)] φίλε το y είναι ένας μετρητης από μια for που υπάρχει πιο πάνω ( for y in (0,4,): ) αλλά ακόμα και αν όλες τις μεταβλητές τις κάνω νουμερα (και το i και το y δηλαδή) πάλι το ίδιο σφάλμα μου βγαζει(όπως και αν αντιγράψω το δικό σου)...
bnvdarklord Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 Το λαθος ειναι σίγουρα στην δημιουργία του p. Δειξε μας πως το φτιάχνεις. Αν δωσεις σαν p το παράδειγμα που εδωσες παραπανω δεν βγαζει σφάλμα.
steve62742 Δημοσ. 24 Φεβρουαρίου 2012 Μέλος Δημοσ. 24 Φεβρουαρίου 2012 συγκεκριμένα ο πίνακας είναι αυτός p = [[0.05, 0.05, 0.05, 0.05 ,0.05],[0.05, 0.05, 0.05, 0.05 ,0.05], [0.05, 0.05, 0.05, 0.05 ,0.05],[0.05, 0.05, 0.05, 0.05 ,0.05]]
ggeo1 Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 To πρόβλημα οφείλεται διότι πας να χειριστείς κάποια μεταβλητή τύπου float ως πίνακα. Δώσε ένα μεγαλύτερο κομμάτι κώδικα να καταλάβουμε.
twiner Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 για να μη μαντεύουμε, δεν δίνεις καλύτερα όλο τον κώδικα να τον δούμε;
virxen75 Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 για να μη μαντεύουμε, δεν δίνεις καλύτερα όλο τον κώδικα να τον δούμε; +1 φίλε το y είναι ένας μετρητης από μια for που υπάρχει πιο πάνω ( for y in (0,4,): ) αλλά ακόμα και αν όλες τις μεταβλητές τις κάνω νουμερα (και το i και το y δηλαδή) πάλι το ίδιο σφάλμα μου βγαζει(όπως και αν αντιγράψω το δικό σου)... και το i τι τιμές παίρνει? Υ.Γ. τελευταία μαντεψιά!!! >s = 0.8 * p[int(i)][int((y-1) % 5)]
bnvdarklord Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 virxen δεν πιστευω να ειναι αυτό, αν βαλεις float σε index σου βγάζει error οτι τα index πρεπει να είναι ακέραιοι.
marios_geo Δημοσ. 24 Φεβρουαρίου 2012 Δημοσ. 24 Φεβρουαρίου 2012 παιδιά έχω αυτή την εντολή στην python s = 0.8 * p[(y-1) % 5] Αν και δεν ξέρω python (δηλάδη αν οι πίνακες είναι zero based): Όταν y=0; τότε (y-1) % 5 =0 Μπορείς να ορίσεις πίνακα στην python νε αυτό τον τρόπο p[1][0] ;
Lomar Δημοσ. 25 Φεβρουαρίου 2012 Δημοσ. 25 Φεβρουαρίου 2012 Βασικά φίλε μου εδώ: 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 καθόλου περίεργη, η λογική της σύνταξής της είναι πολύ κοντά σε ψευδογλώσσες, μόνο η διαίρεση με πραγματικούς είναι όντως εκκεντρική στη σύνταξή της.
steve62742 Δημοσ. 25 Φεβρουαρίου 2012 Μέλος Δημοσ. 25 Φεβρουαρίου 2012 Παιδιά το έλυσα το πρόβλημα,αν και δεν θυμάμε τι έφταιγε τελικά Ευχαριστώ για την βοήθεια! * το s = 0.8 * p[3][4-1%5] ισούτε με -> s = 0.8 * p[3][3] (δηλαδή πέρνει την τιμή από την προηγούμενη θέση από την λίστα και την πολλαπλασιάζει με 0.8) ** πανέυκολη όπως το πάρει κανείς, γιατί ότι απαιτεί στυχισμένο τον κώδικα αντί της χρήσης {} ή ότι δεν αναγνωρίζει το tab αντίστοιχο με τα κενά, μου φέναιτε αρκετά περίεργο.ίσως είναι μέχρι να την συνηθίσω,θα δίξει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα