python找数字、做加法_Python数学1-2:理解数字——自然数加法,python,12,认识
目前的数字,只能通过这样的方式来定义。
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,认识相关推荐
- Python也有做大型游戏的潜力?原来我们小看了Python,无所不能!!
前言 在小编以前还没怎么接触很多编程语言时,都是认为游戏(端游,手游)都是用C做出来了!不知道大家有没有这么想过,反正我是这样的.后来慢慢接触多了,才知道并不是所有的都是这个样子的! 学习python ...
- python找工作好不好_Python这么火,为何有人说Python不好找工作?
原标题:Python这么火,为何有人说Python不好找工作? Python编程近两年来可谓是C位出道,吸引了无数编程圈里圈外人的围观,有的人想要借机突破自己的职业瓶颈,有人想要借机突破自己的薪酬瓶颈 ...
- python找不到了_python包找不到
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一个名为dns_poison.py的文件需要调用名为netscanner的包 ...
- python程序如何做界面_python是如何写界面程序的?
展开全部 python做界面2113还是用PYQT吧 PYQT支持PY2和PY3 wxpython仅仅支5261持PY2 而python自带的4102tkinter实在是很难1653弄#!/usr/b ...
- python高手能做什么_python高手们、能不能给新手写点心得,迷茫过、好方法、过渡期等等...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 好吧.我承认,这本书才是介绍语法知识最全面,涵盖面最广的书籍.用来为你构建一个完整的Python知识构架实在是太合适了.但是我推荐不要一开始就看着本书.先 ...
- python第一个公开发行版_Python基础篇【第一篇】:python入门
python 简介 python是一种解释型.面向对象.改动数据类型的高级程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. python是纯粹的自由 ...
- 字符串类型的数字比较大小_Python核心知识系列:数字与字符串类型
学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍. Python中有6种标准的数据类型:数字(Number).字符串(Str ...
- python考试有什么用_Python有什么用?2020年学习Python的10个理由
如果你想学习 Python,但是不知道为什么要学习,那么这里有 10 个理由,强调了在 2020 年学习 Python 的好处. 不过,这些问题取决于谁在问,也就是说,对于初学者来说,学习Python ...
- python库有什么用_Python程序员必知什么 常用的Python库有哪些
Python程序员必知什么?常用的Python库有哪些?Python有很多丰富而强大的库,这是它成为人工智能与数据分析领域强者的关键.有很多Python开发人员想知道常用的Python库有哪些,接下来 ...
最新文章
- Axure 部件的交互样式
- 测试点4错的来:1029 旧键盘 (20分)
- 【鲲鹏来了】华为云鲲鹏弹性云服务器 KC1一文全掌握(4)
- MySQL之mysqldump的使用
- CUTE FTP 控制连接已关闭
- linux 检查文件更新,Linux系统文件系统优化及磁盘检查
- perl语言书籍教程推荐
- 软考中级网络工程师真题资料
- 连接linux工具Mtr,Mac、linux和windows mtr路径探测工具安装使用
- 最厉害的象棋软件_太牛了!象棋史上最厉害人机高手竟弃车跟软件对杀,就问你敢不敢...
- 今天使用overleaf生成个人简历
- Serverless Job—— 传统任务新变革
- cx oracle 输出中文,输出cx语言
- 计算机专业需要盲打,计算机盲打的技巧与方法【听看打练习】
- 07_Flask闪现 get_flashed_messages()
- hdmi 计算机 接口类型,计算机的 VGA 接口和 HDMI 接口在显示上有什么区别
- 清华李建忠设计模式课程感想
- 微信小程序引入iconfont单色图标实例
- ntp和chrony
- vue实现动态详情页面
热门文章
- 遨游 Nginx服务安装
- 1.1	什么是持久化?
- 韦森:哈耶克大战凯恩斯的论战(一)
- 01【托业口语】- PART1 Read a text aloud
- [转载] 全本张广泰——第十三回 广泰认义父 善心救江玉
- ORACLE - 数据查询
- 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
- Linux-Ubuntu 18.04主题美化及字体安装简易教程
- 我们面临的困境,往往不是“程序问题”
- Enhanced Deep Residual Networks for Single Image Super-Resolution