Ik krijg deze fout en weet niet hoe ik deze moet oplossen…
Temp[i]=T*(p[i]/po)**rp
TypeError: 'int' object does not support item assignment
Antwoord 1, autoriteit 100%
U probeert hier vermoedelijk een lijst met lengtes lenp
op te bouwen. U moet hier een lijst maken door vermenigvuldiging:
Temp = [None] * lenp
maar u kunt beter de lijst samenstellen door eraan toe te voegen:
Temp = []
for i in p:
Temp.append(T * (i / po) ** rp)
waar je p[i]
niet gebruikt maar i
rechtstreeks; Python for
loops zijn eigenlijk for eachloops.
Uw range()
produceert waarden in de reeks [0, 10, 20, ... 1200)
en de for
lus wijst elk van die waarden naar i
per iteratie. Als je i
weer gebruikt om in p
te indexeren, zou je problemen krijgen; p[0]
zou nog steeds 0
zijn, maar p[10]
zou dan 100
zijn, p[20]
is 200
, enz. totdat p[120]
een IndexError
genereert omdat er slechts 119 verschillende waarden in dat bereik.
Je kunt de for
-lus die wordt toegevoegd aan Temp
samenvouwen tot een lijstbegrip om de lijst in één keer op te bouwen:
rp=1.331
po=1000
T=280
Temp = [T * (i / po) ** rp for i in range(0, 1200, 10)]
Antwoord 2, autoriteit 75%
Er zijn een aantal problemen met uw code.
De meest directe is dat uw Temp
-waarde geen reeks is waaraan u dingen kunt toewijzen, maar slechts een geheel getal (de haakjes doen niets). Hoewel je er een tuple van zou kunnen maken door een komma toe te voegen, kun je nog steeds geen waarden toewijzen aan Temp
nadat het is gemaakt (tupels zijn onveranderlijk). In plaats daarvan wil je waarschijnlijk een lijst.
Er is echter een ander probleem met uw lus. Een for-lus zoals for value in sequence
wijst waarden uit de sequence
toe aan de variabele value
. Het wijst geen indexen toe! Als je indexen nodig hebt, kun je ofwel enumerate
gebruiken of een andere looping-constructie gebruiken, zoals een lijstbegrip.
Hier is een minimaal gewijzigde versie van uw code die eerst een lijst met lenp
nullen maakt en vervolgens hun waarden vervangt door de berekende:
p=range(0,1200,10)
lenp=len(p)
rp=1.331
po=1000
T=280
Temp=[0]*lenp
for i, p_value in enumerate(p):
Temp[i]=T*(p_value/po)**rp
print T
Hier is een meer pythonische versie die een lijstbegrip gebruikt in plaats van een gewone lus:
rp=1.331
po=1000
T=280
Temp = [T*(p_value/po)**rp for p_value in range(0,1200,10)]
Antwoord 3, autoriteit 25%
Uw Temp
is geen tuple, het is gewoon een geheel getal tussen haakjes. Je kunt dit oplossen met een simpele ,
. Overweeg het volgende:
>>> x = (42) # not a tuple
>>> x[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
>>>
>>> x = (42,) # tuple
>>> x[0]
42
Tuples zijn echter onveranderlijken u kunt een dergelijke opdracht niet uitvoeren:
>>> x[0] = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Je kunt dit probleem oplossen door in plaats daarvan een lijst te gebruiken.
Antwoord 4, autoriteit 25%
De fout is dat wanneer we een (getal) toekennen aan x, dit is wat er feitelijk gebeurt,
>>> x = (50)
>>> x
50
Dus als je een lege lijst wilt maken, kun je dat op deze manier doen
rows = 5
cols = 3
matrix = [[0 for c in range(cols)] for r in range(rows)]
Het gaat zoiets maken,
>>> matrix
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]