目前的数字,只能通过这样的方式来定义。

z = zero()

one = next(z)

two = next(one)

three = next(two)

four = next(three)

而且除了定义之外,我们对这些数字还不能做什么。

让我们首先建立自然数的

加法运算

我们利用归纳公理,这样定义加法的规则:

①任何数N加上0都不变(N+0 => N)

②任何数N加上“M的后继”,等于(N+M)的后继(N+ next(M) => next(N+M))

根据规则②,我们可以看到

N+one(N+“zero的后继”)=> N+ next(z) => next(N+z) => next(N)

N+two(等于N+“one的后继”)=> N+ next(one) => next(N+one) => next(next(N))

...

以此类推

然后我们用python的代码来实现这个规则(自然数加法nAdd)。

def nAdd(a1, a2):

if isZero(a2):

return a1

return nNext(nAdd(a1, nPre(a2)))

代码说明几乎可以省略了,归纳公理,非常恰当地用递归来实现。

为了验证加法的正确性,我们再根据自然公理定义一下什么叫做两个自然数相等。

公理④说明:不同元素有不同的后继。那么显然根据逆否命题,如果两个自然数的前驱相同,就代表这两个自然数相同。

我们这样定义

相等

的规则:

①0与0相等

②0与其他任何自然数都不相等

③任何两个自然数是否相等,取决于它们的前驱数是否相等

自然数相等(nEq)的代码实现如下:

def nEq(a1, a2):

if isZero(a1) and isZero(a2):

return True

elif isZero(a1) or isZero(a2):

return False

else:

return nEq(nPre(a1), nPre(a2))

代码说明也相当直接:如果a1和a2同时为None,肯定是相同;否则,两者任何单一为None都说明不相同。两个数字都不为None时,则取决于他们的前驱是否相同。这时,我们可以做一些测试。

from nature import *

import pytest

def test_basic():

z = zero()

one = nNext(z)

two = nNext(one)

three = nNext(two)

four = nNext(three)

five = nNext(four)

a= nNext(zero())

b= nAdd(z, one)

c= nPre(a)

d= nAdd(two, three)

e= nAdd(two, four)

# 这个时候还没有-1的定义,应当报错

with pytest.raises(TypeError):

minusOne= nPre(z)

# 不相同判断

assert not nEq(two, one)

assert not nEq(b, three)

assert not nEq(four, nNext(five))

# 相同判断

assert nEq(z, nPre(one))

assert nEq(d, five)

assert nEq(e, nNext(five))

# 加法交换律

assert nEq(nAdd(three, four), nAdd(four, three))

# 加法结合律

assert nEq(nAdd(five, nAdd(three, four)), nAdd(nAdd(five, three), four))

测试用了pytest,用法相当简洁的一个测试框架。

python找数字、做加法_Python数学1-2:理解数字——自然数加法,python,12,认识相关推荐

  1. Python也有做大型游戏的潜力?原来我们小看了Python,无所不能!!

    前言 在小编以前还没怎么接触很多编程语言时,都是认为游戏(端游,手游)都是用C做出来了!不知道大家有没有这么想过,反正我是这样的.后来慢慢接触多了,才知道并不是所有的都是这个样子的! 学习python ...

  2. python找工作好不好_Python这么火,为何有人说Python不好找工作?

    原标题:Python这么火,为何有人说Python不好找工作? Python编程近两年来可谓是C位出道,吸引了无数编程圈里圈外人的围观,有的人想要借机突破自己的职业瓶颈,有人想要借机突破自己的薪酬瓶颈 ...

  3. python找不到了_python包找不到

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个名为dns_poison.py的文件需要调用名为netscanner的包 ...

  4. python程序如何做界面_python是如何写界面程序的?

    展开全部 python做界面2113还是用PYQT吧 PYQT支持PY2和PY3 wxpython仅仅支5261持PY2 而python自带的4102tkinter实在是很难1653弄#!/usr/b ...

  5. python高手能做什么_python高手们、能不能给新手写点心得,迷茫过、好方法、过渡期等等...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 好吧.我承认,这本书才是介绍语法知识最全面,涵盖面最广的书籍.用来为你构建一个完整的Python知识构架实在是太合适了.但是我推荐不要一开始就看着本书.先 ...

  6. python第一个公开发行版_Python基础篇【第一篇】:python入门

    python 简介 python是一种解释型.面向对象.改动数据类型的高级程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. python是纯粹的自由 ...

  7. 字符串类型的数字比较大小_Python核心知识系列:数字与字符串类型

    ​学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍. Python中有6种标准的数据类型:数字(Number).字符串(Str ...

  8. python考试有什么用_Python有什么用?2020年学习Python的10个理由

    如果你想学习 Python,但是不知道为什么要学习,那么这里有 10 个理由,强调了在 2020 年学习 Python 的好处. 不过,这些问题取决于谁在问,也就是说,对于初学者来说,学习Python ...

  9. python库有什么用_Python程序员必知什么 常用的Python库有哪些

    Python程序员必知什么?常用的Python库有哪些?Python有很多丰富而强大的库,这是它成为人工智能与数据分析领域强者的关键.有很多Python开发人员想知道常用的Python库有哪些,接下来 ...

最新文章

  1. Axure 部件的交互样式
  2. 测试点4错的来:1029 旧键盘 (20分)
  3. 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(4)
  4. MySQL之mysqldump的使用
  5. CUTE FTP 控制连接已关闭
  6. linux 检查文件更新,Linux系统文件系统优化及磁盘检查
  7. perl语言书籍教程推荐
  8. 软考中级网络工程师真题资料
  9. 连接linux工具Mtr,Mac、linux和windows mtr路径探测工具安装使用
  10. 最厉害的象棋软件_太牛了!象棋史上最厉害人机高手竟弃车跟软件对杀,就问你敢不敢...
  11. 今天使用overleaf生成个人简历
  12. Serverless Job—— 传统任务新变革
  13. cx oracle 输出中文,输出cx语言
  14. 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
  15. 07_Flask闪现 get_flashed_messages()
  16. hdmi 计算机 接口类型,计算机的 VGA 接口和 HDMI 接口在显示上有什么区别
  17. 清华李建忠设计模式课程感想
  18. 微信小程序引入iconfont单色图标实例
  19. ntp和chrony
  20. vue实现动态详情页面

热门文章

  1. 遨游 Nginx服务安装
  2. 1.1 什么是持久化?
  3. 韦森:哈耶克大战凯恩斯的论战(一)
  4. 01【托业口语】- PART1 Read a text aloud
  5. [转载] 全本张广泰——第十三回 广泰认义父 善心救江玉
  6. ORACLE - 数据查询
  7. 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
  8. Linux-Ubuntu 18.04主题美化及字体安装简易教程
  9. 我们面临的困境,往往不是“程序问题”
  10. Enhanced Deep Residual Networks for Single Image Super-Resolution