按递增顺序打印一个数字作为 2 的幂之和
Printing a number as a sum of powers of 2 in increasing order
我正在尝试打印一个十进制整数(非负数)作为 2 的幂之和,即对于输入 10,它应该打印不带引号的“2 8”。我已经写了这段代码,但是有人可以给我一份吗?[=11=]
n = bin(int(raw_input()))[-1:1:-1]
print (' ').join([str((int(n[j])+1)**j) for j in xrange(len(n)) if n[j] == '1'])
最好将它分布在多行中,并且在列表推导中使用 and input
隐藏了代码正在执行的信息的关键部分。
最终,你要求做的事情并不漂亮,但无论如何:
print (' ').join([str(2**i) for i,j in enumerate(bin(int(raw_input()))[-1:1:-1]) if j == '1'])
印刷精美:
print ' '.join(
[str(2**i)
for i,j in enumerate(
bin(int(raw_input()))[-1:1:-1]
)
if j == '1']
)
备注:
int(n[j])+1)
将始终为 2,因为您仅在 j
为 1 时才进行迭代。
enumerate
returns 元组列表,每个元组包含索引和值,因此您不需要存储 n
,可以直接针对 j
进行测试.
- Python 可以遍历项目列表而不必通过索引获取它们,这是
[list[i]**2 for i in len(list)]
和 [i**2 for i in list]
之间的区别
您不需要在字符串两边加上方括号,因此您可以通过这样做节省一些 space:
" ".join(...)
而不是这个:
(" ").join(...)
我正在尝试打印一个十进制整数(非负数)作为 2 的幂之和,即对于输入 10,它应该打印不带引号的“2 8”。我已经写了这段代码,但是有人可以给我一份吗?[=11=]
n = bin(int(raw_input()))[-1:1:-1]
print (' ').join([str((int(n[j])+1)**j) for j in xrange(len(n)) if n[j] == '1'])
最好将它分布在多行中,并且在列表推导中使用 and input
隐藏了代码正在执行的信息的关键部分。
最终,你要求做的事情并不漂亮,但无论如何:
print (' ').join([str(2**i) for i,j in enumerate(bin(int(raw_input()))[-1:1:-1]) if j == '1'])
印刷精美:
print ' '.join(
[str(2**i)
for i,j in enumerate(
bin(int(raw_input()))[-1:1:-1]
)
if j == '1']
)
备注:
int(n[j])+1)
将始终为 2,因为您仅在j
为 1 时才进行迭代。enumerate
returns 元组列表,每个元组包含索引和值,因此您不需要存储n
,可以直接针对j
进行测试.- Python 可以遍历项目列表而不必通过索引获取它们,这是
[list[i]**2 for i in len(list)]
和[i**2 for i in list]
之间的区别
您不需要在字符串两边加上方括号,因此您可以通过这样做节省一些 space:
" ".join(...)
而不是这个:
(" ").join(...)