|  | 
 
 发表于 2014-3-26 13:59:34
|
显示全部楼层 
| 本帖最后由 xiawb 于 2014-3-26 14:36 编辑 
 >>>
 向右移动10步后,位置是: (10, 0)
 向上移动130步后,位置是: (10, 70)
 向左移动10步后,位置是: (0, 70)
 >>>
 
 print('向右移动10步后,位置是:', move([1, 0], 10))
 print('向上移动430步后,位置是:', move([0, 1], 430))
 print('向左移动10步后,位置是:', move([-1, 0], 10))
 
 >>>
 向右移动10步后,位置是: (10, 0)
 向上移动430步后,位置是: (10, -230)
 向左移动10步后,位置是: (0, 30)
 >>>
 :lol:
 origin = (0, 0)         # 原点
 legal_x = [-100, 100]   # x轴的移动范围
 legal_y = [-100, 100]   # y轴的移动范围
 def create(pos_x=0, pos_y=0):
 # 初始化位于原点为主
 def moving(direction, step):
 # direction参数设置方向,1为向右(向上),-1为向左(向下),0为不移动
 # step参数设置移动的距离
 nonlocal pos_x, pos_y
 new_x = pos_x + direction[0] * step
 new_y = pos_y + direction[1] * step
 # 检查移动后是否超出x轴边界
 while new_x>legal_x[1] or new_x<legal_x[0]:
 new_x=-new_x+legal_x[0]*2 if new_x < legal_x[0] else -new_x+legal_x[1]*2
 pos_x = new_x
 # 检查移动后是否超出y轴边界
 while new_y>legal_y[1] or new_y<legal_y[0]:
 new_y=-new_y+legal_y[0]*2 if new_y < legal_y[0] else -new_y+legal_y[1]*2
 pos_y = new_y
 return pos_x, pos_y
 return moving
 
 move = create()
 print('向右移动10步后,位置是:', move([1, 0], 10))
 print('向上移动430步后,位置是:', move([0, 1], 430))
 print('向左移动410步后,位置是:', move([-1, 0], 410))
 
 | 
 |