From 73e45fd8a6e44f467369af6e94c46acd3c9f889b Mon Sep 17 00:00:00 2001 From: alexanderskiba <58416654+alexanderskiba@users.noreply.github.com> Date: Sun, 22 Mar 2020 15:39:27 +0300 Subject: [PATCH 1/2] Add files via upload --- my_homework1.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 my_homework1.py diff --git a/my_homework1.py b/my_homework1.py new file mode 100644 index 0000000..7dcc361 --- /dev/null +++ b/my_homework1.py @@ -0,0 +1,96 @@ +from array import array + +class ArrayList: + def __init__(self,typecode,initializer=()): + self._arr = array(typecode,initializer) + + def __getitem__(self, key): + return self._arr[key] + + def __len__(self): + return self._arr.buffer_info()[1] # buffer_info return a tuple (address, length) + + def __contains__(self, elem): + for x in range(self._arr.buffer_info()[1]): + if self._arr[x] == elem: + return True + + def __iter__(self): + for i in range(self._arr.buffer_info()[1]): + yield self._arr[i] + + def __reversed__(self): + return self._arr[::-1] + + def __index__(self,item): + for i, x in enumerate(self._arr): + if x == item: + return i + + def __count__(self, item): + c = 0 + for x in self._arr: + if x == item: + c += 1 + return c + + + +#int +print('int tests: ') +print() + +a = ArrayList('i', (1,4,5,4,3,5,64,43,6)) + +print('getitem test: ', a.__getitem__(3)) +print('len test: ', a.__len__()) +print('contains test: ', a.__contains__(64)) +print('iter test: ') +for k in a: + print(k, end=' ') +print() +print('reversed test: ') +print(a.__reversed__()) +print('index test: ',a.__index__(64)) +print('count test: ',a.__count__(4)) + +#str +print('str tests: ') +print() +a1 = ArrayList('u', ('x','y','z','x','z','p','q')) + +print('getitem test: ', a1.__getitem__(3)) +print('len test: ', a1.__len__()) +print('contains test: ', a1.__contains__('x')) +print('iter test: ') +for k in a1: + print(k, end=' ') +print() +print('reversed test: ') +print(a1.__reversed__()) +print('index test: ',a1.__index__('q')) +print('count test: ',a1.__count__('x')) + +#float +print('float tests: ') +print() +a2 = ArrayList('d', (1.1,1.2,1.3,1.4,1.4,1.5,1.2,1.7)) + +print('getitem test: ', a2.__getitem__(3)) +print('len test: ', a2.__len__()) +print('contains test: ', a2.__contains__(1.7)) +print('iter test: ') +for k in a2: + print(k, end=' ') +print() +print() +print('reversed test: ') +print(a2.__reversed__()) +print('index test: ',a2.__index__(1.1)) +print('count test: ',a2.__count__(1.4)) + + + + + + From 6a1db72243da0f09f0ee160dbd73a3b0e2257e4b Mon Sep 17 00:00:00 2001 From: alexanderskiba <58416654+alexanderskiba@users.noreply.github.com> Date: Tue, 24 Mar 2020 15:16:12 +0300 Subject: [PATCH 2/2] fixed added the ability to work with slices, changed __iter__ () method - via https://habr.com/ru/post/337314/, fixed __contains__(), added conditionals for array. --- my_homework1.py | 212 ++++++++++++++++++++++++++---------------------- 1 file changed, 116 insertions(+), 96 deletions(-) diff --git a/my_homework1.py b/my_homework1.py index 7dcc361..d35da5c 100644 --- a/my_homework1.py +++ b/my_homework1.py @@ -1,96 +1,116 @@ -from array import array - -class ArrayList: - def __init__(self,typecode,initializer=()): - self._arr = array(typecode,initializer) - - def __getitem__(self, key): - return self._arr[key] - - def __len__(self): - return self._arr.buffer_info()[1] # buffer_info return a tuple (address, length) - - def __contains__(self, elem): - for x in range(self._arr.buffer_info()[1]): - if self._arr[x] == elem: - return True - - def __iter__(self): - for i in range(self._arr.buffer_info()[1]): - yield self._arr[i] - - def __reversed__(self): - return self._arr[::-1] - - def __index__(self,item): - for i, x in enumerate(self._arr): - if x == item: - return i - - def __count__(self, item): - c = 0 - for x in self._arr: - if x == item: - c += 1 - return c - - - -#int -print('int tests: ') -print() - -a = ArrayList('i', (1,4,5,4,3,5,64,43,6)) - -print('getitem test: ', a.__getitem__(3)) -print('len test: ', a.__len__()) -print('contains test: ', a.__contains__(64)) -print('iter test: ') -for k in a: - print(k, end=' ') -print() -print('reversed test: ') -print(a.__reversed__()) -print('index test: ',a.__index__(64)) -print('count test: ',a.__count__(4)) - -#str -print('str tests: ') -print() -a1 = ArrayList('u', ('x','y','z','x','z','p','q')) - -print('getitem test: ', a1.__getitem__(3)) -print('len test: ', a1.__len__()) -print('contains test: ', a1.__contains__('x')) -print('iter test: ') -for k in a1: - print(k, end=' ') -print() -print('reversed test: ') -print(a1.__reversed__()) -print('index test: ',a1.__index__('q')) -print('count test: ',a1.__count__('x')) - -#float -print('float tests: ') -print() -a2 = ArrayList('d', (1.1,1.2,1.3,1.4,1.4,1.5,1.2,1.7)) - -print('getitem test: ', a2.__getitem__(3)) -print('len test: ', a2.__len__()) -print('contains test: ', a2.__contains__(1.7)) -print('iter test: ') -for k in a2: - print(k, end=' ') -print() -print() -print('reversed test: ') -print(a2.__reversed__()) -print('index test: ',a2.__index__(1.1)) -print('count test: ',a2.__count__(1.4)) - - - - - - +from array import array +class Iterator: #additional class for __iter__() + def __init__(self, collection): + self.cursor = -1 + self._collection = collection + def __next__(self,default=None): + if self.cursor + 1 >= len(self._collection): + self.cursor = -1 + raise StopIteration + self.cursor +=1 + return self._collection[self.cursor] + +types_dict = {int: 'i', str: 'u', float: 'd'} #matching dict +class ArrayList: + def __init__(self,datatype,initializer=()): + typecode = types_dict[datatype] + for x in initializer: + if type(x) != datatype: + raise Exception("Wrong initializer datatype") #fixed + self._arr = array(typecode, initializer) + self._iterator = Iterator(self._arr) + + def __getitem__(self, key): #fixed (slice added) - working only for int type + cls = type(self) + if isinstance(key,slice): + return cls(int,self._arr[key]) + elif isinstance(key,int): + return self._arr[key] + else: + raise IndexError + + def __repr__(self): + return f"{self._arr}" + + def __len__(self): + return self._arr.buffer_info()[1] # buffer_info return a tuple (address, length) + + def __contains__(self, elem): + for x in range(self.__len__()): #fixed + if self._arr[x] == elem: + return True + + def __iter__(self): + return self._iterator + # for i in range(self._arr.buffer_info()[1]): + # yield self._arr[i] + + def __reversed__(self): + return self._arr[::-1] + + def __index__(self,item): + for i, x in enumerate(self._arr): + if x == item: + return i + + def __count__(self, item): + c = 0 + for x in self._arr: + if x == item: + c += 1 + return c + + + +#int +print('int tests: ') +print() +a = ArrayList(int, (1,4,5,4,3,5,64,43,6)) + +print('slice test: ', a[0:3]) +print('getitem test: ', a.__getitem__(3)) +print('len test: ', a.__len__()) +print('contains test: ', a.__contains__(64)) +print('iter test: ') +for k in a: + print(k, end=' ') +print() +print('reversed test: ') +print(a.__reversed__()) +print('index test: ',a.__index__(64)) +print('count test: ',a.__count__(4)) + +#str +print('str tests: ') +print() +a1 = ArrayList(str, ('x','y','z','x','z','p','q')) + +print('getitem test: ', a1.__getitem__(3)) +print('len test: ', a1.__len__()) +print('contains test: ', a1.__contains__('x')) +print('iter test: ') +for k in a1: + print(k, end=' ') +print() +print('reversed test: ') +print(a1.__reversed__()) +print('index test: ',a1.__index__('q')) +print('count test: ',a1.__count__('x')) + +#float +print('float tests: ') +print() +a2 = ArrayList(float, (1.1,1.2,1.3,1.4,1.4,1.5,1.2,1.7)) + +print('getitem test: ', a2.__getitem__(3)) +print('len test: ', a2.__len__()) +print('contains test: ', a2.__contains__(1.7)) +print('iter test: ') +for k in a2: + print(k, end=' ') +print() +print() +print('reversed test: ') +print(a2.__reversed__()) +print('index test: ',a2.__index__(1.1)) +print('count test: ',a2.__count__(1.4))