python:迭代包含带有for循环的元组的列表时键入错误

时间:2017-01-05 14:36:58

标签: python

我正在为学校做这项任务,我必须建立一个游戏"。游戏的目的是以某种方式向太空射击火箭,它将击中屏幕另一侧的目标。火箭必须绕行星等,并且必须考虑它们的引力...但是我不知道我在这里做错了什么:

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'对象不可迭代

由于

2 个答案:

答案 0 :(得分:3)

但是你没有遍历元组列表,而是在$ rspec -fd test_spec.rb my first test does something Finished in 0.00178 seconds (files took 0.10381 seconds to load) 1 example, 0 failures 上运行,它返回一个整数。不要那样做。

你可能打算使用len(),但也不要这样做:你应该总是遍历列表本身,直接为你提供元素:

range

答案 1 :(得分:-1)

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

尝试更改以下内容:

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

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

这可以解决您的问题。