我怎么能减少这段代码的长度?

时间:2015-05-07 17:54:14

标签: python-3.x dictionary

我需要尽可能地减少Python3中这段代码的长度(即使它的可读性较差):

a,b,x,y=[int(i) for i in input().split()]
while 1: 
 r=''
 if y<b:r='S';y+=1
 if y>b:r='N';y-=1 
 if x<a:r+='E';x+=1
 if x>a:r+='W';x-=1
 print(r)

它是一张地图:你在(x,y),你需要去(a,b) S为南 N代表北方 NE东北...... 每次转弯后,我必须告诉我们去哪里使用打印。

例如,我可以将所有if放在一行吗?

2 个答案:

答案 0 :(得分:0)

a,b,x,y=[int(i) for i in input().split()]
print('S'*(b-y)+'N'*(y-b)+'E'*(a-x)+'W'*(x-a))

这取决于'W' * 3 == 'WWW''W' * -3 == ''。方向的排序将与原始代码不同(它不会与多个E / W交错多个N / Ses)。与原始代码不同,一旦达到目标,它就不会进入无限循环。

答案 1 :(得分:0)

这个解决方案实际上是更长,但是它起作用并且通过上帝来实现它太难看了。

from itertools import chain, zip_longest
a,b,x,y=[int(i) for i in input().split()]
[ print(''.join(x)) for x in zip_longest(chain(('N' for _ in range(b, y)), ('S' for _ in range(b, y, -1))), chain(('W' for _ in range(a, x)), ('E' for _ in range (a, x, -1))), fillvalue='') ]