等差数列生成器

发布时间 2023-06-03 10:11:57作者: limalove

 

 

 1 class ArithmeticProgression:
 2     
 3     def __init__(self, begin, step, end = None):
 4         self.begin = begin
 5         self.end = end
 6         self.step = step
 7         
 8         
 9     def __iter__(self):
10         result = type(self.begin + self.step)(self.begin)
11         forever = self.end is None
12         index = 0
13         
14         while forever or result < self.end:
15             yield result
16             index += 1
17             result = self.begin + self.step * index
18             
19             
20             
21 
22 ap = list(ArithmeticProgression(0,1,3))
23 print('\n', ap)
24 
25 
26 ap1 = list(ArithmeticProgression(1, 0.5, 3))
27 print('\n', ap1)
28 
29 
30 ap2 = list(ArithmeticProgression(1,  1/3, 4))
31 print('\n', ap2)
32 
33 
34 from fractions import Fraction
35 ap3 = list(ArithmeticProgression(1, Fraction(2,3),4))
36 print('\n', ap3)
37 
38 
39 from decimal import Decimal
40 ap4 = list(ArithmeticProgression(1, Decimal('.8'), 6))
41 print('\n', ap4)
42 
43 
44 
45 
46 #定义成函数形式实现上述功能_生成器函数
47 def aritprog_gen(begin, step, end = None):
48     result = type(begin + step)(begin)
49     forever = end is None
50     index = 0
51     
52     while forever or result < end:
53         yield result
54         index += 1
55         result = begin + step * index
56         
57     
58     
59     
60     
61     
62 #使用函数实现的第二种方式:
63 import itertools
64 
65 def aritpro_gen_v2(begin, step, end = None):
66     first = type(begin + step)(begin)
67     ap_gen = itertools.count(begin, step)
68     
69     if end is None:
70         itertools.takewhile(lambda n: n < end, ap_gen)
71     
72     return ap_gen