CodeWars 03: Calculating with Functions


問題の説明
This time we want to write calculations using functions and get the results. Let's have a look at some examples:
seven(times(five())) # must return 35
four(plus(nine())) # must return 13
eight(minus(three())) # must return 5
six(divided_by(two())) # must return 3
(例を参照)数値名が書かれた関数と算術関数を作成し、関数callで演算式を完了します.
せいげんじょうけん
  • There must be a function for each number from 0 ("zero") to 9 ("nine")
    0から9までの各数値に対応する関数
  • を作成します.
  • There must be a function for each of the following mathematical operations: plus, minus, times, dividedBy (divided_by in Ruby and Python)
    4つの演算で機能する関数のセットを作成します.
  • Each calculation consist of exactly one operation and two numbers
    1つの計算式は、1つの算術関数と2つの数値関数を正確に含むべきである.
  • The most outer function represents the left operand, the most inner function represents the right operand
    一番外側の関数は計算式の左側にあり、一番奥の関数は計算式の右側にあります.
  • Division should be integer division. For example, this should return 2, not 2.666666...:
    除算演算の結果値は整数でなければなりません.例えば、2.6666.結果値が「」の場合は、「2」を返します.
  • I/O例eight(divided_by(three())) 결과값 : 2に答える
    def zero(func = None): 
    	return 0 if func is None else func(0)
    def one(func = None): 
    	return 1 if func is None else func(1)
    def two(func = None): 
    	return 2 if func is None else func(2)
    def three(func = None): 
    	return 3 if func is None else func(3)
    def four(func = None): 
    	return 4 if func is None else func(4)
    def five(func = None): 
    	return 5 if func is None else func(5)
    def six(func = None): 
    	return 6 if func is None else func(6)
    def seven(func = None): 
    	return 7 if func is None else func(7)
    def eight(func = None): 
    	return 8 if func is None else func(8)
    def nine(func = None): 
    	return 9 if func is None else func(9)
    
    def plus(y): 
    	return lambda x: x+y
    def minus(y): 
    	return lambda x: x-y
    def times(y): 
    	return lambda  x: x*y
    def divided_by(y): 
    	return lambda  x: x//y
  • は簡単そうに見えますが、メモリに格納される概念は考慮されていません.これは長い時間がかかる問題です.
  • の3つの演算子を使用して、戻り値を2つのケースに分けます.None(関数が入力されていない場合)とNone(入力関数)です.
  • 関数が入力されていなければ、1つの数字を返すだけで、ない場合は、1つの関数(プラス記号(...))を返すので、パラメータとして名前に対応する(two=2)数字を返すだけです.
  • lambdaを使用して算術関数を記述し、各関数は演算に一致する関数を返します.
  • 論理の流れを表示するために、
  • 2(プラス記号(1()))という例を作成します.
    one()には関数のパラメータがないので、None条件文でfunc inの場合は1を返します.
    plus(1)の戻り値はlambda x:x+1である.Lambda式はメモリに格納されます.
  • 2(プラス(1))では、one()とは入力パラメータが異なります.先ほど保存したlambda x:x+1ここで返されるfunc(2)はplus(2)ではないことに注意してください.plus(2)ではなく保存されているlambda x:x+1したがって、x=2であるため、lambda x:2+1は3を返す.