问一个关于python函数式写法的问题
有两段python代码,运行应该说会一致的,但是没有达到一致的效果,不知道问题在哪,其中car1.py输出是对的.
car1.py:
from random import random
time = 5
car_positions = [1,1,1]
while time:
# decrease time
time -= 1
print ('')
for i in range(len(car_positions)):
# move car
if random() > 0.3:
car_positions[i] += 1
# draw car
print ('-' * car_positions[i])
用函数式的写法:
car_function.py: (执行的输出不太对)
from random import random
def race(state):
draw(state)
if state['time']:
race(run_step_of_race(state))
def draw(state):
print ('')
print ('\n'.join(map(output_car,state['car_positions'])))
def output_car(car_positions):
return '-' * car_positions
def run_step_of_race(state):
return {'time':state['time']-1,'car_positions':move_cars(state['car_positions'])}
def move_cars(car_positions):
return map(lambda x : x+1 if random() > 0.3 else x,car_positions)
race({'time':5,'car_positions':[1,1,1]})
为什么呢???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
大概看了下你的代码,然后自己运行了一下,最明显的两个大问题先说一下:
car1.py
中,你是先car_positions[i] += 1
再print('-' * car_positions[i])
,而car_function.py
中则相反。car_function.py
中move_cars
返回的是map
对象而不是list
,因此后面的每次递归state['car_positions']
都变成了一个map
对象。解决方法是在move_cars
中return list(map(lambda x: x+1 if random() > 0.3 else x, car_positions))
,就是套一个list
。上面两个问题解决后,这两段代码基本就一样了,但你会发现输出还是不同,这是
random
的问题,你把两段代码的random
都删了,直接+=1
,就行了。