问一个关于python函数式写法的问题
有两段python代码,运行应该说会一致的,但是没有达到一致的效果,不知道问题在哪,其中car1.py输出是对的.
car1.py:
from random import randomtime = 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: (执行的输出不太对)
python">from random import randomdef 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]})
为什么呢???
回答:
大概看了下你的代码,然后自己运行了一下,最明显的两个大问题先说一下:
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
,就行了。
以上是 问一个关于python函数式写法的问题 的全部内容, 来源链接: utcz.com/a/163720.html