美文网首页
python模拟无穷项数列

python模拟无穷项数列

作者: Lysias | 来源:发表于2019-08-13 18:49 被阅读0次

等差数列和等比数列类。功能如下:

  • 模拟无穷项数
  • 获取任一项的值
  • 跨步取项
class GeneralSequence:

    
    def __init__(self, valueAt):
        
        self.valueAt = valueAt
    
    
    def __getitem__(self, index):

        if isinstance(index, slice):
            
            from itertools import islice
            
            return islice(iter(self), index.start,
                          index.stop, index.step)
        
        else:    
            return self.valueAt(index)
    
    
    def __iter__(self):
        from itertools import count
        return map(self.valueAt, count())
    
    
class ArithmeticSequence(GeneralSequence):
    
    def __init__(self, a, d):
        valueAt = lambda n: a + n * d
        GeneralSequence.__init__(self, valueAt)

        
class GeometricSequence(GeneralSequence):
    
    def __init__(self, a, q):
        valueAt = lambda n: a * q**n
        GeneralSequence.__init__(self, valueAt)

GeneralSequence

__init__

持有通项公式。

__genitem__

分两种情况,

  • 输入的index是切片时,用itertools.islice跨步取项。
  • 输入index是数字时,用通项公式算出该处的值。

__iter__

实现迭代协议,可以支持这样的用法:

for item in GeometricSequence(1, 2):
    if item > 10000:
        break
    print(item, end=' ')
>> 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 

因为itertools.count不会抛出StopIteration异常,需要手动跳出循环。

ArithmeticSequence和GeometricSequence

接收各自的参数,构造充当通项公式的valueAt函数。

用例

an = ArithmeticSequence(10, 2)

it = iter(an)
for i in range(10):
    print(next(it), end=' ')
>> 10 12 14 16 18 20 22 24 26 28 
bn = ArithmeticSequence(-5, 3)
for i in range(10):
    print(bn[i], end=' ')
>> -5 -2 1 4 7 10 13 16 19 22 
cn = GeometricSequence(1, 2)
list(cn[100:140:5])
>> 
[1267650600228229401496703205376,
 40564819207303340847894502572032,
 1298074214633706907132624082305024,
 41538374868278621028243970633760768,
 1329227995784915872903807060280344576,
 42535295865117307932921825928971026432,
 1361129467683753853853498429727072845824,
 43556142965880123323311949751266331066368]

相关文章

  • python模拟无穷项数列

    等差数列和等比数列类。功能如下: 模拟无穷项数 获取任一项的值 跨步取项 GeneralSequence __in...

  • P3-P4数列极限

    数列极限 无穷数列 项 n项 通项 有界 极限概念 你随便给一个的任意小的 ,肯定有那么个N,当 n>N时,使得...

  • Python程序生成斐波那契数列

    问题定义 编写一个Python函数用来生成一个斐波那契数列。斐波那契数列是一个这样的数列,它的后一项是前两项之和。...

  • 数量关系知识

    一、数列: 1. 等差数列:后一项减前一项形成一个常数数列 2. 二级等差数列:后一项减前一项形成一个新的数列为等...

  • 递推数列

    如果数列的第项由它的前面若干项所确定,那么该数列就是一个递推数列事实上,等差数列与等比数列都是递推数列,它们满足的...

  • 求数列的和

    求数列的和 题目: 数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。 Exampl...

  • 等差数列与等比数列

    等差数列与等比数列是两类最简单的数列,它们是其他数列化归的对象. 如果一个数列从第2项起,每一项与它的前一项的差(...

  • 欧拉计划2 (偶斐波那契数)

    题目:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。 java: python3: 不要靠馈赠来获得一个...

  • 菜鸟编程学习(python&C--005)

    Python 练习实例6(Python 100例) 题目:斐波那契数列。 程序分析:斐波那契数列(Fibonacc...

  • 小学奥数易错题|等差数列

    若干个数排成一列,称为数列。 数列中的每一个数称为一项,其中第一项称为首项,最后一项称为末项, 数列中数的个数称为...

网友评论

      本文标题:python模拟无穷项数列

      本文链接:https://www.haomeiwen.com/subject/plbvjctx.html