Python 3.x 如何缩短此代码的长度?
我需要尽可能减少Python3中此代码的长度,即使其可读性较低:Python 3.x 如何缩短此代码的长度?,python-3.x,dictionary,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去南方 北纬 东北方向。。。。 每转一圈后,我都必须用印刷品告诉你去
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去南方
北纬
东北方向。。。。
每转一圈后,我都必须用印刷品告诉你去哪里
例如,我可以把所有的if放在一行吗
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==。方向的顺序将与原始代码不同,因为它不会将多个N/SE与多个E/WE交织。与原始代码不同的是,一旦你达到目标,它就不会进入无限循环。这个解决方案实际上更长,但它可以工作,而且上帝保佑,它太难看了,不能不分享
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='') ]
谢谢,但我需要一个最佳角度:我必须使用“SE”和“NW”。。。。我必须一次打印一个方向。我认为你无法缩短代码。while 1应该是while a,b!=x、 是的。这是一个游戏,当角色在a,b上时,它会自动停止。你可能想在code golf上问这个问题。