原题:

This time we want to write calculations using functions and get the results. Let's have a look at some examples:

  1. seven(times(five())) # must return 35
  2. four(plus(nine())) # must return 13
  3. eight(minus(three())) # must return 5
  4. six(divided_by(two())) # must return 3

Requirements:

  • There must be a function for each number from 0 ("zero") to 9 ("nine")
  • There must be a function for each of the following mathematical operations: plus, minus, times, dividedBy (divided_by in Ruby and Python)
  • Each calculation consist of exactly one operation and two numbers
  • The most outer function represents the left operand, the most inner function represents the right operand
  • Divison should be integer division. For example, this should return 2, not 2.666666...:
  1. eight(divided_by(three()))

    -----------------------------------------------------------------------------------------------------------------------------
    题目的要求就是利用函数的方式进行加减乘除,如:
    seven(times(five())) ------->相当于:7*5=35

解题过程

  1. 这道理不会做 o(╥﹏╥)o

    以下是一位网友的解决思路:
  1. def zero(a='0'):
  2. if a != '0':
  3. if a[0]=='+':
  4. return 0+int(a[1])
  5. if a[0]=='-':
  6. return 0-int(a[1])
  7. if a[0]=='*':
  8. return 0*int(a[1])
  9. if a[0]=='/':
  10. return int(0/int(a[1]))
  11. else:
  12. return '0'
  13. def one(a='1'):
  14. if a != '1':
  15. if a[0]=='+':
  16. return 1+int(a[1])
  17. if a[0]=='-':
  18. return 1-int(a[1])
  19. if a[0]=='*':
  20. return 1*int(a[1])
  21. if a[0]=='/':
  22. return int(1/int(a[1]))
  23. else:
  24. return '1'
  25. def two(a='2'):
  26. if a != '2':
  27. if a[0]=='+':
  28. return 2+int(a[1])
  29. if a[0]=='-':
  30. return 2-int(a[1])
  31. if a[0]=='*':
  32. return 2*int(a[1])
  33. if a[0]=='/':
  34. return int(2/int(a[1]))
  35. else:
  36. return '2'
  37. def three(a='3'):
  38. if a != '3':
  39. if a[0]=='+':
  40. return 3+int(a[1])
  41. if a[0]=='-':
  42. return 3-int(a[1])
  43. if a[0]=='*':
  44. return 3*int(a[1])
  45. if a[0]=='/':
  46. return int(3/int(a[1]))
  47. else:
  48. return '3'
  49. def four(a='4'):
  50. if a != '4':
  51. if a[0]=='+':
  52. return 4+int(a[1])
  53. if a[0]=='-':
  54. return 4-int(a[1])
  55. if a[0]=='*':
  56. return 4*int(a[1])
  57. if a[0]=='/':
  58. return int(4/int(a[1]))
  59. else:
  60. return '4'
  61. def five(a='5'):
  62. if a != '5':
  63. if a[0]=='+':
  64. return 5+int(a[1])
  65. if a[0]=='-':
  66. return 5-int(a[1])
  67. if a[0]=='*':
  68. return 5*int(a[1])
  69. if a[0]=='/':
  70. return int(5/int(a[1]))
  71. else:
  72. return '5'
  73. def six(a='6'):
  74. if a != '6':
  75. if a[0]=='+':
  76. return 6+int(a[1])
  77. if a[0]=='-':
  78. return 6-int(a[1])
  79. if a[0]=='*':
  80. return 6*int(a[1])
  81. if a[0]=='/':
  82. return int(6/int(a[1]))
  83. else:
  84. return '6'
  85. def seven(a='7'):
  86. if a != '7':
  87. if a[0]=='+':
  88. return 7+int(a[1])
  89. if a[0]=='-':
  90. return 7-int(a[1])
  91. if a[0]=='*':
  92. return 7*int(a[1])
  93. if a[0]=='/':
  94. return int(7/int(a[1]))
  95. else:
  96. return '7'
  97. def eight(a='8'):
  98. if a != '8':
  99. if a[0]=='+':
  100. return 8+int(a[1])
  101. if a[0]=='-':
  102. return 8-int(a[1])
  103. if a[0]=='*':
  104. return 8*int(a[1])
  105. if a[0]=='/':
  106. return int(8/int(a[1]))
  107. else:
  108. return '8'
  109. def nine(a='9'):
  110. if a != '9':
  111. if a[0]=='+':
  112. return 9+int(a[1])
  113. if a[0]=='-':
  114. return 9-int(a[1])
  115. if a[0]=='*':
  116. return 9*int(a[1])
  117. if a[0]=='/':
  118. return int(9/int(a[1]))
  119. else:
  120. return '9'
  121.  
  122. def plus(a):
  123. return '+'+a
  124. def minus(a):
  125. return '-'+a
  126. def times(a):
  127. return '*'+a
  128. def divided_by(a):
  129. return '/'+a

这位网友的思路很好理解:

  数字函数的传值默认为本身,且默认传回自身的值。如果参数值为其他,则根据参数值判断算法类型符合哪种算法,最后进行相加减。  算法函数只要是将算法的符号和值进行字符串合并,用于在数字函数中进行判断。如:seven(times(five()))

  第一步:先执行five()函数,由于没有参数值,因此使用默认的参数值,返回自身,即:5。

  第二步:处理times(5)函数,将5和算法符号进行合并,即:符号'*'和5合并,返回字符串"*5"

  第三步:处理seven("*5")函数,由于数字函数有参数,因此执行else里面的内容,根据a[0]即字符串的第一个字符来判断符合哪种算法,再将值(即a[1])进行运算,即:5*7=35

优质解答:

  1. def zero(f = None): return 0 if not f else f(0)
  2. def one(f = None): return 1 if not f else f(1)
  3. def two(f = None): return 2 if not f else f(2)
  4. def three(f = None): return 3 if not f else f(3)
  5. def four(f = None): return 4 if not f else f(4)
  6. def five(f = None): return 5 if not f else f(5)
  7. def six(f = None): return 6 if not f else f(6)
  8. def seven(f = None): return 7 if not f else f(7)
  9. def eight(f = None): return 8 if not f else f(8)
  10. def nine(f = None): return 9 if not f else f(9)
  11.  
  12. def plus(y): return lambda x: x+y
  13. def minus(y): return lambda x: x-y
  14. def times(y): return lambda x: x*y
  15. def divided_by(y): return lambda x: int(x/y)

我们来探讨一下这种算法的思路:

  数字函数中,先判断是否为None,为None则返回自身。如果不为None则执行函数f。算术函数返回一个匿名函数。还是选择例子:seven(times(five()))

  第一步:先处理five()函数,即返回自身5。times(5)

  第二步:处理times(5),结果为返回一个匿名函数,函数内部的y值为5。

  第三步:处理f函数,函数f为算术函数处理结果,即返回的匿名函数。f(7)相当于执行匿名函数:lambda 7:7*5处理结果为35。

知识点:

  1、使用了函数默认参数值:

    def one(a=1):  即默认参数a默认传值为1,可自行定义a的参数值。

  2、使用了匿名函数lambda

    lambda 的格式为:lambda x, y: x + y。x和y是需要传入的形参。x+y是函数的处理结果。

  3、使用了闭包

    算术函数的返回值是一个函数,即将先一步处理的结果(y=5)和匿名函数一起保存了下来。而seven(f),就是将这个包赋给了f,f变成了含有y值的匿名函数。

  4、

  1.  

【Kata Daily 190904】Calculating with Functions(函数计算)的更多相关文章

  1. 从函数计算架构看 Serverless 的演进与思考

    作者 | 杨皓然  阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...

  2. 开发函数计算的正确姿势 —— 使用 ROS 进行资源编排

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  3. C++习题 虚函数-计算图形面积

    C++习题 虚函数-计算图形面积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 122  Solved: 86 [cid=1143&pid=6 ...

  4. 学习如何看懂SQL Server执行计划(二)——函数计算篇

    二.函数计算部分 --------------------标量聚合--------------------/* 标量聚合-主要在聚合函数操作中产生 计算标量:根据行中的现有值计算出一个新值 流聚合:在 ...

  5. 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  6. 手把手教您将 libreoffice 移植到函数计算平台

    LibreOffice 是由文档基金会开发的自由及开放源代码的办公室套件.LibreOffice 套件包含文字处理器.电子表格.演示文稿程序.矢量图形编辑器和图表工具.数据库管理程序及创建和编辑数学公 ...

  7. 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。

    问题: 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数. 你总共三种操作方法: 1.插入一个字符 2.删除一个字符 3.替换一个字符 格式: 输入行输 ...

  8. 函数计算 Python 连接 SQL Server 小结

    python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql .由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需 ...

  9. sql server2005版本中,len函数计算了字符串末尾的空格

    sql server2005版本中,len函数计算了字符串末尾的空格的长度,以下是测试脚本: print @@version declare @v varchar(max) set @v = 'hp, ...

随机推荐

  1. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  2. Java知识日常收集整理001Java获取变量的数据类型的实现方法

    一.具体情况区分 对于简单类型变量,是无法直接获得变量类型的:要想获取,必须自定义函数进行返回. 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); 二.代码实现 ...

  3. 用flannel实现跨主机container通信

    最近在看kubernetes,看到了网络部分,这部分是集群设计的难点,也是我比较感兴趣的部分.书上提到不同node的container之间通信主要使用flannel,openvswitch等技术,这些 ...

  4. 多测师浅谈 学员实现价值就是我们的幸福_高级讲师肖sir

    学员实现价值就是我们的幸福 作为一名资深的IT高级讲师,在传统的行业IT薪资基本都是过万,作为一名IT培训教师,培养出在不同领域的测试,并且接触各种各样的产品,目前市场流行的比如银行业务系统,语音类系 ...

  5. day33 Pyhton 常用模块03

    一.正则表达式: 1.元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹配一个制表符 \b 匹配一个单词的结尾 ...

  6. 置Hugo的代码高亮

    +++ date="2020-10-17" title="设置Hugo的代码高亮" tags=["hugo"] categories=[&q ...

  7. openresty使用redis作本地缓存

    一,为什么要使用redis作本地缓存? 1,使用缓存通常会有三层 当使用openresty作为web服务器时,我们更看重是的它可以通过lua编程的扩展能力,就openresty而言,它可以实现的功能非 ...

  8. spring boot:用shardingjdbc实现多数据源的分库分表(shardingsphere 4.1.1/spring boot 2.3.1)

    一,shardingjdbc的用途 1,官方站介绍: Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈, 它由 JDBC.Proxy 和 Sidecar( ...

  9. request-html 使用

    from requests_html import HTMLSessionsession = HTMLSession()resp = session.get('http://www.spbeen.co ...

  10. mysql中事件失效如何解决

    重启Mysql服务可能会导致event_scheduler关闭,事件失效.解决方法如下: 1.解决办法: #查看是否开启 show variables like 'event_scheduler'; ...