用单行编写Python代码

-10 投票
2 回答
1270 浏览
提问于 2025-05-01 09:34

我可以把下面的代码写成一行吗?

   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

如果不行,那我怎么才能把这段代码写得尽量少呢?
(顺便说一下,我可以把它缩减到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

在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)

3

因为Python的列表推导式是完全可计算的,并且不需要换行,所以任何程序都可以写成Python的一行代码。

如果你强行设置一些任意的限制(比如“语句的顺序”——这到底是什么意思?是执行顺序吗?还是在源代码中第一次出现的顺序?),那么答案是:你可以去掉一些换行,但不是全部。

比如说,你可以这样写:

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''')

但是如果你在“真正”的代码中这样做,比如说,不只是为了好玩,那就会有麻烦。

撰写回答