我可以在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
感谢
答案 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
)