python:在由带有for循环的元组组成的列表上迭代时出现类型错误

python:在由带有for循环的元组组成的列表上迭代时出现类型错误,python,Python,我正在为学校做这个作业,在那里我必须制作一个“游戏”。游戏的重点是以某种方式向太空发射火箭,使其击中屏幕另一侧的目标。火箭必须绕着行星旋转,并且必须考虑到它们的引力。。。但是我不知道我做错了什么: planet1 = (vector(position1_x,position1_y), mass1) planet2=... planets = [planet1,planet2,planet3] position_rocket = vector(positionrocket_x, positionr

我正在为学校做这个作业,在那里我必须制作一个“游戏”。游戏的重点是以某种方式向太空发射火箭,使其击中屏幕另一侧的目标。火箭必须绕着行星旋转,并且必须考虑到它们的引力。。。但是我不知道我做错了什么:

planet1 = (vector(position1_x,position1_y), mass1)
planet2=...
planets = [planet1,planet2,planet3]
position_rocket = vector(positionrocket_x, positionrocket_y)

def gravforce(m,a,b):
    #a = position_planet, b = position_rocket, m = mass planet
   r = b-a
   return (-G * m/mag2(r)))) * norm(r)
   #this is just a formula to calculate the gravitational force produced by one planet


def total_gravforce(planets,position_rocket):
     total_grav = vector(0,0,0)
     for elements in len(planets):
         total_grav = total_grav + gravforce(planets[elements][1],planets[elements][0],position_rocket)
    return total_grav
因此,我得出以下结论: 对于len(行星)中的元素: TypeError:“int”对象不可编辑


谢谢

但您不是在一个元组列表上迭代,而是在返回整数的
len()
上操作。不要那样做

您可能打算使用
range
,但也不要这样做:您应该始终迭代列表本身,它直接为您提供元素:

for elements in planets:
    total_grav = total_grav + gravforce(elements[1], elements[0], position_rocket)

由于你试图遍历行星的长度(这是一个整数),你没有得到你期望的结果

尝试更改以下内容:

 for elements in len(planets):
     total_grav = total_grav + gravforce(planets[elements][1],planets[elements][0],position_rocket)


这将解决您的问题

如果只是行星中的行星:更改为
范围(len(plants))
@depperm,请不要建议这样做。这不是Pythonic,几乎总是有更好的方法。我知道有更好的方法,但根据他目前的代码,这将使循环工作,不是最好的方法,但工作缺少冒号,但是的。@Tagc抱歉,修复了。非常感谢!这解决了我的问题@我不喜欢这种说法,如果它能解决你的问题,你应该接受这个答案。很好的尝试,但是代码中还有其他需要更改的地方;)@布鲁诺德修利尔现在看起来怎么样?好吧,那更好,但现在它只是丹尼尔·罗斯曼答案的复制品
 for elements in planets:
     total_grav = total_grav + gravforce(elements[1],elements[0],position_rocket)