用单行编写python代码

时间:2014-11-03 19:56:43

标签: python

我可以在python中用单行编写以下代码吗?

   t=int(input())
 while t:
    t-=1
    n=int(input())
    a=i=0
    while not(n&1<<i):
        i+=1
    while n&1<<i:
        n^=1<<i
        a=a*2+1
        i+=1
    print(n^1<<i)+a/2

如果没有,我怎么能用尽可能少的线写这段代码?
(PS:我可以减少6行,可以更好)我的解决方案
t=int(input()) while t: t-=1;n=int(input());a=i=0 while not(n&1<<i):i+=1 while n&1<<i:n^=1<<i;a=a*2+1;i+=1 print(n^1<<i)+a/2
感谢

2 个答案:

答案 0 :(得分:1)

由于pythons list comprehensions完成并且不需要换行符,所以任何程序都可以写成python oneliner。

如果你强制执行任意限制(比如“语句的顺序” - 这甚至意味着什么?执行顺序?源代码中的首次出现?),那么答案是:你可以消除一些换行符,但不是全部。

而不是

if x:
   do_stuff()

你可以这样做:

if x: do_stuff()

而不是

x = 23
y = 42

你可以这样做:

x,y = 23, 42

而不是

 do_stuff()
 do_more_stuff()

你可以做到

do_stuff; do_more_stuff()

如果你真的,真的必须,你可以在一行中exec一个多行python程序,所以你的程序就像这样:

exec('''t=int(input())\nwhile t:\n t-=1;n=int(input());a=i=0\n while not(n&1<<i):i+=1\n while n&1<<i:n^=1<<i;a=a*2+1;i+=1\n print(n^1<<i)+a/2\n''')

但如果你用“真实”代码执行此操作,例如不只是为了好玩,小猫死了。

答案 1 :(得分:0)

不建议经常在Python中折叠行,因为这样会丢失Python着名的简单性和清晰度。而且您经常无法折叠线,因为缩进级别用于定义块结构/嵌套。

但如果你真的想要一个浓缩版本:

print "s0"
while True:
    print "s1"; print "s2"
    while True: print "s3"
    while True: print "s4"; print "s5"; print "s6"
    print "s7"

(为简单起见,您的表达式已替换为True