Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何缩短此代码的长度?_Python 3.x_Dictionary - Fatal编程技术网

Python 3.x 如何缩短此代码的长度?

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去南方 北纬 东北方向。。。。 每转一圈后,我都必须用印刷品告诉你去

我需要尽可能减少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去南方 北纬 东北方向。。。。 每转一圈后,我都必须用印刷品告诉你去哪里

例如,我可以把所有的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上问这个问题。