2016-12-14 1 views
3

一部ifelse「sは、同様に、書き換え(codegolfスタイル)を短縮することができます。たとえば、if a<b:return aは、と書き換えられます。return("",a)[a<b]です。この場合Pythonで印刷中に変数を減らす方法は?ブール値は、Pythonの整数として作用することができるので、

(私は読みやすくするための条件を簡素化)、

if a<b: print(a) 

は、次の両方のように書き換えることができます。私たちは改行を無視した場合

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

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

(、他のend=""を使用することができます)。

a<bがすべての真上にある場合、変数nをデクリメントしたい(その状態では、すべてがnのwhileループにあります)。

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

上記の構文を使用している間。 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:Pythonは一つにはC.ではありません

+12

を使用する奇妙な事をしないでください。 – Maroun

+0

@MarounMarounそれは私には不思議そうに見えません:)とにかく、私は将来、潜在的に奇妙な質問を投稿する前に2度考えます。私に気づいてくれてありがとう! –

+0

申し訳ありませんが、すべての人に事前に文章のタイトルは私のエリアではありません。ガイドラインやその他の提案は高く評価されます。 –

答えて

9

これらの文は常に真ではありません、Pythonはデクリメント演算子を持っていないので、print(n--)ウォン」仕事。もう一つは、Pythonの代入は文であり、式ではないので、print(n-=1)は動作しません。

あなたが本当にあなたのprint文は、副作用を持っていると思った場合は、それが機能を呼び出すことができます:

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

ないが。あなたのprintステートメントに副作用があると誰も予想しないので、あなたのprintステートメントをコメントアウトするとプログラムの結果が変わると誰もが驚くでしょう。

編集:これはコードゴルフの質問です。その場合、私の文体的アドバイスは本当に有効ではありません。みんなゴルフのコードが奇妙だと思っています。

ps。あなたの目標が式にifステートメントを変更する場合は、andor、短絡で遊ぶ。たとえば、次のように

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

それともif ... else表現

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

私は 'その場合、私の文体的アドバイスは本当に有効ではありません。 Codegolfは質問の主要な部分ではありません:) –

+2

あなたは 'return n'ではありませんか? 'None'と表示されますよね? –

+1

ありがとう@hiroprotagonist! –

関連する問題