Skip to content

Commit 550e76e

Browse files
committed
类RingSort中添加__iter__和__next__方法创建迭代器,使对象能够迭代
1 parent ccd8679 commit 550e76e

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

josephus.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,19 @@ def __init__(self):
4646
self.id = 0
4747
self.step = 1
4848

49+
def __iter__(self):
50+
"""返回迭代器"""
51+
return self
52+
53+
def __next__(self):
54+
"""返回下一个要抽取的Person对象"""
55+
if len(self.people) == 0:
56+
raise StopIteration
57+
58+
self.id = (self.id + self.step - 1) % len(self.people)
59+
ret = self.people.pop(self.id)
60+
return ret
61+
4962
def reset(self, start, step):
5063
"""设置起始位置和步进"""
5164
self.id = start - 1
@@ -55,15 +68,15 @@ def append(self, target):
5568
"""容器里添加Person对象"""
5669
self.people.append(target)
5770

58-
def next_yield(self):
59-
"""
60-
创建生成器
61-
每次返回一个要抽取的Person对象
62-
"""
63-
for i in range(len(self.people)):
64-
self.id = (self.id + self.step - 1) % len(self.people)
65-
ret = self.people.pop(self.id)
66-
yield ret
71+
# def next_yield(self):
72+
# """
73+
# 创建生成器
74+
# 每次返回一个要抽取的Person对象
75+
# """
76+
# for i in range(len(self.people)):
77+
# self.id = (self.id + self.step - 1) % len(self.people)
78+
# ret = self.people.pop(self.id)
79+
# yield ret
6780

6881

6982
if __name__ == '__main__':
@@ -84,10 +97,8 @@ def next_yield(self):
8497
raise IndexError("Out of range!")
8598

8699
ring.reset(start, step)
87-
final = ring.next_yield()
88-
89100
print("\nThe sequence after sorting is:\n")
90-
for i in range(len(ring.people)):
91-
final.__next__().print_data()
101+
for i in ring:
102+
i.print_data()
92103

93104
# *=====End File=====* #

0 commit comments

Comments
 (0)