51Testing软件测试论坛

标题: 一个关于python的函数式编程的问题 [打印本页]

作者: 测试积点老人    时间: 2020-10-9 13:28
标题: 一个关于python的函数式编程的问题
有两段python代码,运行应该说会一致的,但是没有达到一致的效果,不知道问题在哪,其中car1.py输出是对的.

  1. <p>car1.py:</p><p>from random import random</p><p>time = 5
  2. car_positions = [1,1,1]</p><p>while time:
  3.     # decrease time
  4.     time -= 1</p><p>    print ('')
  5.     for i in range(len(car_positions)):
  6.         # move car
  7.         if random() > 0.3:
  8.             car_positions[i] += 1</p><p>
  9.         # draw car
  10.         print ('-' * car_positions[i])</p>
复制代码


用函数式的写法:

  1. <p>car_function.py: (执行的输出不太对)
  2. from random import random</p><p>def race(state):
  3.     draw(state)
  4.     if state['time']:
  5.         race(run_step_of_race(state))</p><p>def draw(state):
  6.     print ('')
  7.     print ('\n'.join(map(output_car,state['car_positions'])))</p><p>def output_car(car_positions):
  8.     return '-' * car_positions</p><p>def run_step_of_race(state):
  9.     return {'time':state['time']-1,'car_positions':move_cars(state['car_positions'])}</p><p>def move_cars(car_positions):
  10.     return map(lambda x : x+1 if random() > 0.3 else x,car_positions)</p><p>    </p><p>race({'time':5,'car_positions':[1,1,1]})</p>
复制代码



作者: 海海豚    时间: 2020-10-10 09:40
python版本问题,更换一下版本
作者: qqq911    时间: 2020-10-10 10:47
可以把输出打印以下
作者: 郭小贱    时间: 2020-10-10 15:17
def move_cars(car_positions):
return map(lambda x : x+1 if random() > 0.3 else x,car_positions)
改为:
def move_cars(car_positions):
return list(map(lambda x : x+1 if random() > 0.3 else x,car_positions))

Python2中,map直接返回元素列表
Python3中,map函数返回一个map类型对象。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2