【问题标题】:python3 recursive correctness for my function我的函数的python3递归正确性
【发布时间】:2012-11-25 06:11:49
【问题描述】:

我需要帮助解决一个问题。例如我有一个名为planets的字典:

{'Mercury': {'Orbital Radius': '38001200', 'Radius': '243900.7',
'Period': '87.9691'}, 'Ariel': {'Orbital Radius': '8595000', 'Radius':
'60000', 'Period': '2.520379'}, 'Sun': {'Satellites':
'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris',
'Orbital Radius': '0', 'Radius': '20890260'}, 'Phobos': {'Orbital
Radius': '3623500.6', 'Radius': '200000', 'Period': '0.31891023'},
'Deimos': {'Orbital Radius': '8346000', 'Radius': '200000.2',
'Period': '1.26244'}, 'Mars': {'Satellites': 'Phobos,Deimos', 'Orbital
Radius': '106669000', 'Radius': '339600.2', 'Period': '686.971'},
'Rhea': {'Orbital Radius': '24000000', 'Radius': '75000', 'Period':
'4.5'}, 'Oberon': {'Orbital Radius': '26235000', 'Radius': '75000',
'Period': '13.463'}, 'Europa': {'Orbital Radius': '36486200',
'Radius': '156000.8', 'Period': '3.551181'}, 'Tethys': {'Orbital
Radius': '13706000', 'Radius': '50000', 'Period': '1.9'}, 'Miranda':
{'Orbital Radius': '5822550', 'Radius': '23500', 'Period': '1.413'},
'Saturn': {'Satellites':
'Mimas,Enceladus,Tethys,Dione,Rhea,Titan,Iapetus', 'Orbital Radius':
'353572956', 'Radius': '6026800', 'Period': '10759.22'}, 'Uranus':
{'Satellites': 'Puck,Miranda,Ariel,Umbriel,Titania,Oberon', 'Orbital
Radius': '453572956', 'Radius': '2555900', 'Period': '30799'},
'Neptune': {'Satellites': 'Triton', 'Orbital Radius': '550000000',
'Radius': '2476400', 'Period': '60190'}, 'Titania': {'Orbital Radius':
'19575000', 'Radius': '75000', 'Period': '8.7058'}, 'Enceladus':
{'Orbital Radius': '10706000', 'Radius': '25000', 'Period': '1.4'},
'Venus': {'Orbital Radius': '57477000', 'Radius': '605100.8',
'Period': '224.698'}, 'Moon': {'Orbital Radius': '18128500', 'Radius':
'173700.10', 'Period': '27.321582'}, 'Triton': {'Orbital Radius':
'40000000', 'Radius': '135300', 'Period': '-5.8'}, 'Ceres': {'Orbital
Radius': '130995855', 'Radius': '48700', 'Period': '1679.67'},
'Mimas': {'Orbital Radius': '8433396', 'Radius': '20600', 'Period':
'0.9'}, 'Titan': {'Orbital Radius': '50706000', 'Radius': '257600',
'Period': '15.945'}, 'Ganymede': {'Orbital Radius': '47160000',
'Radius': '263400', 'Period': '7.15455296'}, 'Umbriel': {'Orbital
Radius': '11983500', 'Radius': '60000', 'Period': '4.144177'},
'Callisto': {'Orbital Radius': '69700000', 'Radius': '241000',
'Period': '16.6890184'}, 'Jupiter': {'Satellites':
'Io,Europa,Ganymede,Callisto', 'Orbital Radius': '210573600',
'Radius': '7149200', 'Period': '4332.59'}, 'Io': {'Orbital Radius':
'22000000', 'Radius': '182100.3', 'Period': '1.7691377186'}, 'Earth':
{'Satellites': 'Moon', 'Orbital Radius': '77098290', 'Radius':
'637100.0', 'Period': '365.256363004'}, 'Dione': {'Orbital Radius':
'17106000', 'Radius': '56000', 'Period': '2.7'}, 'Iapetus': {'Orbital
Radius': '72285891', 'Radius': '75000', 'Period': '79'}}

这是我的太阳能动画代码。我的问题是,我的代码是否会不断检查每个“对象”中的“卫星”,然后打印它们(如果存在)?它是递归的吗?我整天都在努力使它检查然后打印!

#code for solar animation
#t = period
#x,y = rootobject coordinates

print("flush false")
scale = 600/max([planets[key]['Orbital Radius'] for key in planets])
t = 0
x = 400
y = 300
print("fillcircle",400,300,planets['Sun']['Radius']*scale)
print("text ", "\"Sun\"",x + planets['Sun']['Radius']*scale,y)


def satellites(planets):
    for 'Satellites' in planets:
        if 'Satellites' not in 'Object':
            return
        else:
            print("refresh")
            print("colour 0 0 0")
            print("clear")
            print("colour 255 255 255")
            r_sat = planets['Object']['Satellites']['Orbital Radius']*scale
            print("circle",x,y,r_sat)
            r_satX = x + math.sin(t*2*math.pi/planets['Object']['Satellites']['Period'])*r_sat
            r_satY = y + math.cos(t*2*math.pi/planets['Object']['Satellites']['Period'])*r_sat
            print("fillcircle",r_satX,r_satY,planets['Object']['Satellites']['Radius']*scale)
            print("text ",['Object']['Satellites'],r_satX + planets['Object']['Satellites']['Radius']*scale,r_satY)
            t += 0.02

system = satellites(planets)
print(system)

我已经接近我的极限了,我已经尝试了我能想到的一切,但我需要帮助!

【问题讨论】:

  • 您使用的是字符串文字而不是变量名:它应该是 for satellites in planetsif satellites not in Object。剩下的没看,祝你好运:)
  • 好的!谢谢 !我想我明白了。

标签: function recursion dictionary python-3.x extraction


【解决方案1】:

1.我的问题是,我的代码是否会不断检查每个“对象”中的“卫星”,然后打印它们(如果存在)?

不,您的 function satellites() 不是有效的 python。这是相当多的错误,但我可以看到你正朝着正确的方向前进有点

for 'Satellites' in planets:
    if 'Satellites' not in 'Object':
        return

'Satellites' 只是一个字符串,所以for 'string' in 'iterable object' 不是有效的python。

if 'Satellites' not in 'Object': 和上一行有同样的问题,string 'Satellites'neverstring 'Object'

我相信这就是你想要做的:

for key in planets.keys():               # For all keys in the outer dic 
    if 'Satellites' not in planets[key]: # Does inner dic have key 'Satellites'
        return

其中key 是一个变量(不是字符串),它在循环中获取planets 中包含的每个值。所以第一次key 的值为'Mecury',第二次key 的值为'Sun' 等等。然后我们查看内部字典planets[key] 并检查该字典是否有键'Satellites'

然后使用planets[key]['Satellites'] 而不是planets['Object']['Satellites'] 作为密钥'Object' 永远不存在(查看输入文件)。

2.是递归的吗?

不,您的 function satellites() 永远不会自称,请重新阅读我的递归答案:python3 recursion animation in QuickDraw

【讨论】:

  • 是的,这就是我想要得到的!感谢您清理它!我读了很多遍。这是否意味着我的“如果卫星不在行星[key]:”不是基本情况?
  • 你在正确的轨道上,如果没有Satellites留下打印然后返回。
猜你喜欢
  • 2012-11-28
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2013-04-19
  • 2021-04-06
相关资源
最近更新 更多