51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2335|回复: 3
打印 上一主题 下一主题

一个关于python的函数式编程的问题

[复制链接]
  • TA的每日心情
    擦汗
    前天 09:07
  • 签到天数: 527 天

    连续签到: 4 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2020-10-9 13:28:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1测试积点
    有两段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>
    复制代码


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:59
  • 签到天数: 1801 天

    连续签到: 5 天

    [LV.Master]测试大本营

    2#
    发表于 2020-10-10 09:40:00 | 只看该作者
    python版本问题,更换一下版本
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 10:10
  • 签到天数: 1516 天

    连续签到: 5 天

    [LV.Master]测试大本营

    3#
    发表于 2020-10-10 10:47:42 | 只看该作者
    可以把输出打印以下
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-10-22 14:23
  • 签到天数: 1007 天

    连续签到: 1 天

    [LV.10]测试总司令

    4#
    发表于 2020-10-10 15:17:02 | 只看该作者
    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类型对象。
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 21:38 , Processed in 0.064108 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表