アプリ版:「スタンプのみでお礼する」機能のリリースについて

def func(n):
return n**2 * (1, -1)[n < 0]

nを2乗するところまでわかります * (1, -1)[n < 0]は何を意味しているのでしょうか

A 回答 (1件)

演算子の優先順位から


(n**2) * ( (1, -1)[n < 0] )
と解釈されます。

(1, -1) とは、 2要素のタプルです。
タプルに [] を付けると、[]で指定した要素になります。
よく見かけるのは
t = (1,-1)
t[0] # 1
t[1] #-1
といった、タプルを変数に入れたものですが、
(1,-1)[0] # 1
(1,-1)[1] #-1
といったように、直接タプルを書いても[]が使えます。


< のような比較演算子は、「比較した結果が成立しているならTrue,そうでないならFalse」という「計算」をする演算子です。
n < 0 というのは「nが0未満ならならTrue,そうでないならFalse」という「計算」になります。

bool型のTrue/Falseを数値として扱うと、それぞれ 1/0 となります。

よって
(1,-1)[False] # Falseが0として扱われて (1,-1)[0]と同じ 1
(1,-1)[True] # Trueが0として扱われて (1,-1)[1]と同じ -1
となります。



コンピュータの気持になって、部分部分をどう解釈するのか、ということ考えるとよいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます
合点がいきました
この関数はリストの中身の数値を2乗した上で元の符号のまま返す関数です

お礼日時:2019/08/19 03:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!