我在想是否可以使用pyp来创建一个一行代码,具有与此相同的功能。
perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %= 12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }'
这个程序接收一个逗号分隔的数字列表,每行8个数字,并以相同的格式输出,但是每行最后两个数字会对12取模。同时,它也会先原样输出第一行(标题行)。
我有很多这样晦涩的perl单行程序,首先我想把它们全部翻译成python。
我在想是否可以使用pyp来创建一个一行代码,具有与此相同的功能。
perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %= 12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }'
这个程序接收一个逗号分隔的数字列表,每行8个数字,并以相同的格式输出,但是每行最后两个数字会对12取模。同时,它也会先原样输出第一行(标题行)。
我有很多这样晦涩的perl单行程序,首先我想把它们全部翻译成python。
声明一下,我不确定我是否赞同这种写法。水平编写代码似乎并没有比垂直编写更好,友好地说,我有点怀疑实践中它提供的优势是否像表面看起来的那样多。Python 的一大乐趣在于你不再需要担心写 GolfScript 了。
话虽如此,我们可以考虑:
pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"
该操作会生成:
localhost-2:coding $ cat exam.pyp
a,b,c,d,e,f,g,h
11,22,33,44,55,66,77,88
12,23,34,45,56,67,78,89
13,24,35,46,57,68,79,80
localhost-2:coding $ cat exam.pyp | pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"
a,b,c,d,e,f,g,h
11,22,33,44,55,66,5,4
12,23,34,45,56,67,6,5
13,24,35,46,57,68,7,8
pyp
程序,大约10分钟前下载的。】