my range reversible example

This commit is contained in:
Mert Gör ☭ 2023-09-03 17:18:16 +03:00
parent 02817aa993
commit 9dbeff1a0e
No known key found for this signature in database
GPG Key ID: 2100A876D55B39B9
1 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,52 @@
class myrange:
def __init__(self, start, stop = None, step = 1):
if stop == None:
self._start = 0
self._stop = start
else:
self._start = start
self._stop = stop
self._step = step
def __iter__(self):
return myrange_iterator(self)
def __reversed__(self):
return myrange_reverse_iterator(self)
class myrange_iterator:
def __init__(self, mr):
self._mr = mr
self._i = mr._start
def __iter__(self):
return self
def __next__(self):
if self._i >= self._mr._stop:
raise StopIteration
self._i += self._mr._step
return self._i - self._mr._step
class myrange_reverse_iterator:
def __init__(self, mr):
self._mr = mr
self._i = mr._stop
def __iter__(self):
return self
def __next__(self):
if self._i <= self._mr._start:
raise StopIteration
self._i -= self._mr._step
return self._i
for i in myrange(10):
print(i, end = ' ')
print()
for i in reversed(range(10)):
print(i, end = ' ')
print()