请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于旅行人坐标计算的问题

#引入函数
from functools import reduce

#初始位置
start = (0, 0)

#经过的位置
steps = [(1, 3), (2, -2), (-2, 3)]

#计算结果
r = reduce(lambda current_pos, new_step: list(map(lambda x, y: x + y, current_pos, new_step)), steps, start)

#结果坐标位置
print(r)

我想到的最优雅的方法,已知初始坐标位置,求最终坐标位置,就用的老师刚教的两个函数 map和reduce.

正在回答 回答被采纳积分+3

2回答

7七月 2019-11-15 02:23:12

这个不太对吧,旅行者是一步步走的,这个能一步步的走吗。

1 回复 有任何疑惑可以回复我~
  • 提问者 爱吃apple的阿狸 #1
    往前走一步,y轴+1,x轴+0,表示(0,1) 这样形式,
    往右走一步 x轴+1, y轴+0 。。。这种传进去,每走一步,x或者y都变化了,就可以计算
    我是这样理解的,或者是我理解错了?
    回复 有任何疑惑可以回复我~ 2019-11-15 02:28:36
  • 7七月 回复 提问者 爱吃apple的阿狸 #2
    不是 我记得课程是写了个函数,怎么走就传参数进去,你可以像课程的形式那样表达出来吗?
    回复 有任何疑惑可以回复我~ 2019-11-15 02:50:14
  • 提问者 爱吃apple的阿狸 回复 7七月 #3
    哦,我懂了,我这个是已知所有走过的步数使用reduce连续计算的,弄成传参那就更简单了,像之前全局变量或者闭包那样
    # 初始位置
    start = (0, 0)
    
    #计算
    def factory(pos):
        def go(step):
            #可以强制声明不是一个局部变量
            nonlocal pos
            pos = list(map(lambda x, y: x + y, pos, step))
            return pos
        return go
    
    tourist = factory(start)
    
    
    #结果坐标位置
    print(tourist((1,0)))
    print(tourist((1,2)))
    print(tourist((-1,-1)))
    print(tourist((3,-1)))
    回复 有任何疑惑可以回复我~ 2019-11-15 17:14:08
提问者 爱吃apple的阿狸 2019-11-15 17:16:22

弄成函数调用,我测试没问题

# 初始位置
start = (0, 0)

#计算
def factory(pos):
    def go(step):
        #可以强制声明不是一个局部变量
        nonlocal pos
        pos = list(map(lambda x, y: x + y, pos, step))
        return pos
    return go

tourist = factory(start)

#结果坐标位置
print(tourist((1,0)))
print(tourist((1,2)))
print(tourist((-1,-1)))
print(tourist((3,-1)))


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信