iter_2.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. class SequenceIterable:
  2. def __init__(self, values):
  3. self.values = values
  4. self.index = 0
  5. def __iter__(self):
  6. return self
  7. def __next__(self):
  8. if self.index >= len(self.values):
  9. raise StopIteration
  10. item = self.values[self.index]
  11. self.index += 1
  12. return item
  13. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  14. class Countdown:
  15. def __init__(self, start):
  16. self.start = start
  17. def __iter__(self):
  18. return self
  19. def __next__(self):
  20. val = self.start
  21. if val < 0:
  22. raise StopIteration
  23. self.start -= 1
  24. return val
  25. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  26. class PowerTwo:
  27. def __init__(self, power):
  28. self.power = power
  29. self.index = 0
  30. def __iter__(self):
  31. return self
  32. def __next__(self):
  33. if self.index > self.power:
  34. raise StopIteration
  35. value = 2**self.index
  36. self.index += 1
  37. return value
  38. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. class Card:
  40. def __init__(self, rank, suit):
  41. self.rank = rank
  42. self.suit = suit
  43. def __str__(self):
  44. return f"{self.rank} {self.suit}"
  45. class Deck:
  46. ranks = [str(n) for n in range(2, 11)] + list('JQKA')
  47. suits = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
  48. def __init__(self):
  49. self.cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
  50. def __getitem__(self, index):
  51. return self.cards[index]
  52. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  53. class FileReader:
  54. def __init__(self, filename):
  55. # self.file = open(filename)
  56. self.index = 0
  57. self.data = []
  58. with open(filename, 'r') as self.file:
  59. for line in self.file:
  60. self.data.append(line)
  61. def __iter__(self):
  62. return self
  63. def __next__(self):
  64. if self.index >= len(self.data):
  65. raise StopIteration
  66. st = self.data[self.index].strip()
  67. self.index += 1
  68. return st
  69. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  70. def test_6():
  71. # reader = FileReader("lorem.txt")
  72. for lite in FileReader('lorem.txt'):
  73. print(lite)
  74. def test_5():
  75. deck = Deck()
  76. for card in deck:
  77. print(card)
  78. def test_4():
  79. for i in PowerTwo(4):
  80. print(i)
  81. def test_3():
  82. for i in Countdown(3):
  83. print(i)
  84. def test_2():
  85. container = SequenceIterable([1, 2 , 3, True, 'hello'])
  86. for i in container:
  87. print(i)
  88. def test_1():
  89. class MyClass:
  90. def __init__(self):
  91. self.items = [1, 2, 3]
  92. self.index = 0
  93. def __iter__(self):
  94. return self
  95. def __next__(self):
  96. if self.index >= len(self.items):
  97. raise StopIteration
  98. item = self.items[self.index]
  99. self.index += 1
  100. return item
  101. for item in MyClass():
  102. print(item)
  103. def main():
  104. l = [1, 2, 3]
  105. s = 'abc'
  106. # test_1()
  107. # test_2()
  108. # test_3()
  109. # test_4()
  110. # test_5()
  111. test_6()
  112. if __name__ == '__main__':
  113. main()