python学数学1-5:认识数字--自然数的比较


任意两个自然数都可以进行加法和乘法。但如果想做减法,在自然数范围内,还受到一些限制。我们的约定是,被减数必须大于或等于减数。前面我们做了两个自然相等的判断,为了这种比较关系,现在我们在前面的基础上做一个扩展,支持全部六种比较的定义。大于,小于,等于,大于等于,小于等于,不等于。

数字的比较规则定义如下:

  • ① 0与0相等
  • ② 0小于任何数字
  • ③ 任何数字大于0
  • ④ 两个数字的比较结果,与它们的前驱进行比较的结果相同。
  • ⑤ 六种比较关系的定义如下:
  1.     nEq(),等于关系,比较为相等,返回真;其余为假
  2.     nNeq(),不等于关系,比较为大于或者小于,返回真;其余为假
  3.     nGt(),大于关系,比较为大于,返回真;其余为假
  4.     nGtEq(),大于等于关系,比较为大于或等于,返回真;其余为假
  5.     nLT(),小于关系,比较为小于,返回真;其余为假
  6.     nLtEq(),小于等于关系,比较为小于或等于,返回真;其余为假

代码如下:

def compare(a, b):
    if (isZero(a) and isZero(b)):
        return '='
    if isZero(b):
        return '>'
    if isZero(a):
        return '<'
    return compare(nPre(a), nPre(b))

def nEq(a1, a2):
    return compare(a1, a2)=='='

def nNeq(a1, a2):
    temp= compare(a1, a2)
    return temp=='>' or temp=='<'

def nGt(a1, a2):
    return compare(a1, a2)=='>'

def nGtEq(a1, a2):
    temp= compare(a1, a2)
    return temp=='>' or temp=='='

def nLt(a1, a2):
    return compare(a1, a2)=='<'

def nLtEq(a1, a2):
    temp= compare(a1, a2)
    return temp=='<' or temp=='='

我们可以再做一些新的测试:

def test_compare():
    z = zero()
    one = nNext(z)
    two = nNext(one)
    three = nNext(two)
    four = nNext(three)
    five = nNext(four)
    # 等于关系
    assert nEq(nMul(three, four), nGetNum('■■■■■■■■■■■■'))
    assert nEq(five, nAdd(two, three))
    assert not nEq(five, nMul(two, three))
    # 不等于关系
    assert nNeq(five, nAdd(one, three))
    assert nNeq(two, nGetNum('■■■■■■'))
    assert not nNeq(three, nGetNum('■■■'))
    # 大于关系
    assert nGt(nMul(three, five), nAdd(nGetNum('■■■■■■'), five))
    assert nGt(nGetNum('■■■■■■■■■'), nMul(two, four))
    assert not nGt(nGetNum('■■■■■■■■■'), nMul(five, four))
    assert not nGt(one, one)
    # 大于等于关系
    assert nGtEq(five, five)
    assert nGtEq(nNext(five), five)
    assert not nGtEq(one, nNext(five))
    # 小于关系
    assert nLt(nMul(three, five), nMul(nGetNum('■■■■'), four))
    assert nLt(nGetNum('■■■■■■■■■'), nGetNum('■■■■■■■■■■■'))
    assert not nLt(nGetNum('■■■■■■■■■■■■'), nMul(three, four))
    assert not nLt(one, zero())
    # 小于等于关系
    assert nLtEq(z, zero())
    assert nLtEq(nGetNum('■■■■■■■■■'), nAdd(nGetNum('■■■■■■■■■'), one))
    assert not nLtEq(nAdd(nGetNum('■■■■■■■■■'), one), nGetNum('■■■■■■■■■'))
    assert not nLtEq(one, z)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值