对于一个学校项目,我和我的一个朋友目前正试图对我们的太阳系进行模拟。我们使用的平台是Glowscript,我们正在使用VPython。我们已经为我们整个太阳系设定了程序,包括所有的行星,太阳和它们之间的力量。
现在,我们试图添加一些额外的,其中之一是一个菜单,用户可以选择一个星球。在我们的代码中,选定的对象(在代码中定义的行星或太阳)将被标记为“currentobject”。在此之后,用户可以使用滑块更改当前对象的质量。
在编程过程中出现了两个问题。第一种情况是,我们无法将对象定义为当前对象,以便以后可以更改其质量。可悲的是,我们在代码中找不到问题。
第二个问题是,我们无法在Glowscript中增加一个以上的模拟。我们已经编程了一个滑块功能,以改变模拟‘速率’(速度),然后菜单和滑块改变质量根本没有出现。
def M(m):
global col, currentobject
currentobject.visible = True
obj = m.selected
if obj == 'Sun':
currentobject = sun
elif obj == "Mercury":
currentobject = mercury
elif obj == "Venus":
currentobject = venus
elif obj == "Earth":
currentobject = earth
elif obj == "Mars":
currentobject = mars
elif obj == "Jupiter":
currentobject = jupiter
elif obj == "Saturn":
currentobject = saturn
elif obj == "Uranus":
currentobject = uranus
elif obj == "Neptune":
currentobject = neptune
currentobject=m.selected
print(m.selected,m.index)
menu(choices=['Choose an object', 'Sun', 'Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'], bind=M)
scene.append_to_caption('\n\n')
def setmass(b):
wt.text = '{:1.2f}'.format(b.value)
sl = slider(min=0.1, max=10, value=0.1, length = 1000, bind=setmass)
wt = wtext(text='{:1.2f}'.format(sl.value))
#mainloop
while (True):
rate(10)
currentobject.mass=currentobject.mass*sl.value最后,我们模拟的用户应该能够在下拉菜单中选择行星或太阳。在此之后,用户应该能够改变所选物体的质量(使用滑块),并在上面的模拟中看到效果(其他行星的轨道发生变化,因为它们对当前物体更有吸引力)。
错误消息:
TypeError:无法读取未定义属性的“质量”
发布于 2019-08-26 20:31:02
您的代码片段还不够完整,无法确切地知道问题所在,但我注意到,对M的第一个调用具有currentobject.visible = True,但是currentobject还不存在,因此您将得到一个错误。类似地,在循环中引用currentobject.mass,但currentobject还不存在。
https://stackoverflow.com/questions/57572033
复制相似问题