我需要尽可能地减少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放在一行吗?
答案 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='') ]