问一个关于python函数式写法的问题

发布于 2022-09-12 12:54:14 字数 1070 浏览 23 评论 0

有两段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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ˇ宁静的妩媚 2022-09-19 12:54:14

大概看了下你的代码,然后自己运行了一下,最明显的两个大问题先说一下:

  1. car1.py中,你是先car_positions[i] += 1print('-' * car_positions[i]),而car_function.py中则相反。
  2. 也是最大的问题:car_function.pymove_cars返回的是map对象而不是list,因此后面的每次递归state['car_positions']都变成了一个map对象。解决方法是在move_carsreturn list(map(lambda x: x+1 if random() > 0.3 else x, car_positions)),就是套一个list

上面两个问题解决后,这两段代码基本就一样了,但你会发现输出还是不同,这是random的问题,你把两段代码的random都删了,直接+=1,就行了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文