2013-10-29 32 views
2

我正在使用python2.7。如果我在打印語句中刪除,,則下面的代碼有效。 但打印在不同的行中的值。如果可能的話,我想在同一行打印一個內聯if-statement如何在python 2.7中使用內聯if else語句在單行中打印2.7

以下是我有:

def binary(x): 

    for i in [128,64,32,16,8,4,2,1]: 
     #if x&i: print 1, 
     #else: print 0, 
     print 1, if x&i else 0 

binary(127) 

它引發以下語法錯誤:

File "binary.py", line 6 
    print 1, if x&i else 0 
      ^
SyntaxError: invalid syntax 

回答

2

把逗號在年底

print 1 if x&i else 0, 

您正在使用條件表達式,形式爲true_expr if condition_expr else false_expr之前的部分爲iftrue_expr)是該表達式的一部分。您正在打印該表達式的結果。

+0

不錯的一個..謝謝! –

2
def binary(x): 
    for i in [128,64,32,16,8,4,2,1]: 
     print 1 if x&i else 0, 

binary(127) 
+0

那容易吧! –

0
x = 127 

>>> [1 if ele & x else 0 for ele in [128, 64, 32, 16, 8, 4, 2, 1]] 
[0, 1, 1, 1, 1, 1, 1, 1] 

您甚至可以使用,

x = 127 

>>> [[0,1][bool(ele & x)] for ele in [128, 64, 32, 16, 8, 4, 2, 1]] 
[0, 1, 1, 1, 1, 1, 1, 1] 
1

至於其他的答案都表示,把逗號在print線將解決你的問題的年底

然而,有一個更容易的方式來實現你想要什麼,如果你使用format

>>> def binary(x): 
...  return " ".join(format(n, "08b")) 
... 
>>> print binary(127) 
0 1 1 1 1 1 1 1 
>>> 

這種方法做同樣的事情,你的功能,只是它是很多更簡潔,高效。

+0

「08b」代表什麼? –

+1

它代表「8位二進制」。換句話說,二進制文件將是8個字符長(就像你想要的那樣)。在那裏有'0'使它在開始時填充0,直到達到8個字符。沒有它,輸出將會是「1 1 1 1 1 1 1」。 – iCodez