2016-12-14 41 views
3

一些ifelse的可改寫和縮短(codegolf式)同樣地,因爲布爾可以如在Python整數行動。例如if a<b:return a可以被重寫爲作爲return("",a)[a<b]如何在Python中打印時減少變量?

在此情況下(I簡化可讀性的條件),

if a<b: print(a) 

可以改寫爲以下兩者:

print(("",a)[a<b]) 

(print(""),print(a))[a<b] 

(如果我們忽略換行符,否則end=""可以使用)。

a<b在所有事物上都成立時,我想遞減一個變量n(整個事物在n的條件下),例如。

if a<b: 
    print(a) 
    n-=1 

while using the syntax trick above above。 在C中,(n/n--)-1不僅等於0,而且還從n減1。在Python中,我還沒有找到辦法做到這一點。一些無效的語法我嘗試:

print(("",a+(n/n--)-1)[a<b]) 

(print(""),(print(a);n-=1))[a<b] 

如何遞減變量(並打印a)當條件使用這種「伎倆」是真的嗎?


1,2,3:這些陳述並非總是如此

+12

請不要做奇怪的事情。 – Maroun

+0

@MarounMaroun對我來說這似乎不奇怪:)總之,我會在將來發佈一個潛在的奇怪問題之前考慮兩次。感謝您注意我! –

+0

很抱歉給大家,因爲措辭標題不是我的區域。任何指導方針或其他建議,將不勝感激。 –

回答

9

Python是不是C.首先,Python沒有一個遞減操作,所以print(n--)韓元」工作。另一方面,Python中的賦值是語句,而不是表達式,所以print(n-=1)將不起作用。

如果你真的想你的打印語句有副作用,它可以調用一個函數:

def decrement(): 
    global n 
    n -= 1 
    return n 
print(decrement()) 

但是不要。沒有人會期望你的印刷聲明有副作用,所以當評論你的印刷聲明改變程序的結果時,每個人都會感到驚訝。

編輯:我只是注意到,這是一個代碼高爾夫問題。在那種情況下,我的文體建議並不真正有效。每個人都希望打高爾夫球的代碼很奇怪。

Ps。如果您的目標是將if語句更改爲表達式,請使用andor進行短路。例如:

a<b and (print(a), decrement()) 

或者使用if ... else表達

(print(a),decrement()) if a<b else None 
+0

我不同意'在這種情況下,我的文體建議並不真正有效。「 Codegolf不是問題的主要部分:) –

+2

你不應該'返回n'?這會打印出「無」,對吧? –

+1

謝謝@hiroprotagonist! –