JS练习3

问题:这次我们要使用函数编写计算并获得结果。让我们看一些例子:

seven(times(five())); // must return 35
four(plus(nine())); // must return 13
eight(minus(three())); // must return 5
six(dividedBy(two())); // must return 3

要求:

每个数字必须有一个函数,范围从0(“零”)到9(“ 9”)
以下每个数学运算必须具有一个函数:加,减,乘,除(divided_by在Ruby和Python中)
每次计算均由一个操作和两个数字组成
最外层的函数代表左操作数,最内层的函数代表右操作数
除法应该是整数除法。例如,应返回2,而不是2.666666…:

思路:要给每个数字方法加个是否传值的判断,有值就进行计算,没有就返回值

  function zero(x) {
        if (!x) {
          return 0
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 0 + Number(z[1])
          } else if (z[0] == '-') {
            return 0 - Number(z[1])
          } else if (z[0] == '*') {
            return 0 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(0 / Number(z[1]))
          }
        }
      }

      function one(x) {
        if (!x) {
          return 1
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 1 + Number(z[1])
          } else if (z[0] == '-') {
            return 1 - Number(z[1])
          } else if (z[0] == '*') {
            return 1 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(1 / Number(z[1]))
          }
        }
      }

      function two(x) {
        if (!x) {
          return 2
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 2 + Number(z[1])
          } else if (z[0] == '-') {
            return 2 - Number(z[1])
          } else if (z[0] == '*') {
            return 2 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(2 / Number(z[1]))
          }
        }
      }

      function three(x) {
        if (!x) {
          return 3
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 3 + Number(z[1])
          } else if (z[0] == '-') {
            return 3 - Number(z[1])
          } else if (z[0] == '*') {
            return 3 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(3 / Number(z[1]))
          }
        }
      }

      function four(x) {
        if (!x) {
          return 4
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            
            return 4 +  Number(z[1])
          } else if (z[0] == '-') {
            return 4 - Number(z[1])
          } else if (z[0] == '*') {
            return 4 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(4 / Number(z[1]))
          }
        }
      }

      function five(x) {
        if (!x) {
          return 5
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 5 + Number(z[1])
          } else if (z[0] == '-') {
            return 5 - Number(z[1])
          } else if (z[0] == '*') {
            return 5 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(5 / Number(z[1]))
          }
        }
      }

      function six(x) {
        if (!x) {
          return 6
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 6 + Number(z[1])
          } else if (z[0] == '-') {
            return 6 - Number(z[1])
          } else if (z[0] == '*') {
            return 6 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(6 / Number(z[1]))
          }
        }
      }

      function seven(x) {
        if (!x) {
          return 7
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 7 + Number(z[1])
          } else if (z[0] == '-') {
            return 7 - Number(z[1])
          } else if (z[0] == '*') {
            return 7 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(7 / Number(z[1]))
          }
        }
      }

      function eight(x) {
        if (!x) {
          return 8
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 8 + Number(z[1])
          } else if (z[0] == '-') {
            return 8 - Number(z[1])
          } else if (z[0] == '*') {
            return 8 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(8 / Number(z[1]))
          }
        }
      }

      function nine(x) {
        if (!x) {
          return 9
        } else {
          var z = x.split(',')
          if (z[0] == '+') {
            return 9 + Number(z[1])
          } else if (z[0] == '-') {
            return 9 - Number(z[1])
          } else if (z[0] == '*') {
            return 9 * Number(z[1])
          } else if (z[0] == '/') {
            return Math.floor(9 / Number(z[1]))
          }
        }
      }

      function plus(x) {
        return '+,'+x
      }

      function minus(x) {
        return '-,'+x
      }

      function times(x) {
        return '*,'+x
      }

      function dividedBy(x) {
        return '/,'+x
      }

但是这样很麻烦,数字方法基本都是在重复,可以提取一下

	var n = function(digit) {
		console.log('1111',digit)
	  return function(op) {
		  console.log('000',op)
		return op ? op(digit) : digit;
	  }
	};
	var zero = n(0);
	var one = n(1);
	var two = n(2);
	var three = n(3);
	var four = n(4);
	var five = n(5);
	var six = n(6);
	var seven = n(7);
	var eight = n(8);
	var nine = n(9);
	
	function plus(r) { return function(l) { return l + r; }; }
	function minus(r) { return function(l) { return l - r; }; }
	function times(r) { return function(l) { return l * r; }; }
	function dividedBy(r) { return function(l) { return Math.floor(l / r); }; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值