我正在为学校做这项任务,我必须建立一个游戏"。游戏的目的是以某种方式向太空射击火箭,它将击中屏幕另一侧的目标。火箭必须绕行星等,并且必须考虑它们的引力...但是我不知道我在这里做错了什么:
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'对象不可迭代
由于
答案 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)
这可以解决您的问题。