Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from enum import Enum
- class Node:
- def __init__(self, number, name):
- if 0 < len(str(number)) < 8 and 0 < len(name) < 16:
- self.name = name
- self.number = number
- else:
- raise ValueError("Invalid value of name or number!")
- class HashTable:
- def __init__(self):
- self.size = 0
- self.table = []
- def add(self, number, name):
- flag = 0
- for i in range(self.size):
- if self.table[i].number == number:
- self.table[i].name = name
- flag = 1
- if not flag:
- self.table.append(Node(number, name))
- self.size += 1
- def find(self, number):
- flag = 0
- for i in range(self.size):
- if self.table[i].number == number:
- flag = 1
- print(self.table[i].name)
- break
- if not flag:
- print("not found")
- def delt(self, number):
- temp = 0
- flag = 0
- for i in range(self.size):
- if self.table[i].number == number:
- flag = 1
- temp = i
- break
- if flag:
- self.table.pop(temp)
- self.size -= 1
- class Command(Enum):
- EXIT = 0
- ADD = 1
- DEL = 2
- FIND = 3
- INFO = 7
- def __str__(self):
- return str(self.value)
- def __eq__(self, other):
- if type(other) == int:
- return self.value == other
- elif type(other) == str:
- return self.name.lower() == other
- else:
- raise TypeError("Impossible to compare there types!")
- def process(hash_table, command, value=None):
- if command == Command.ADD:
- if value:
- if len(value) == 2:
- if value[0].isdigit() and value[1].isalpha():
- number = int(value[0])
- name = value[1]
- hash_table.add(number, name)
- elif value[1].isdigit() and value[0].isalpha():
- number = int(value[1])
- name = value[0]
- hash_table.add(number, name)
- else:
- raise ValueError("Invalid value of number or name!")
- else:
- raise ValueError("Invalid value of a pair!")
- elif command == Command.DEL:
- if value:
- if len(value) == 1:
- if value[0].isdigit():
- value = int(value[0])
- hash_table.delt(value)
- else:
- raise ValueError("Invalid value of number!")
- else:
- raise ValueError("Invalid value of number!")
- elif command == Command.FIND:
- if value:
- if len(value) == 1:
- if value[0].isdigit():
- value = int(value[0])
- hash_table.find(value)
- else:
- raise ValueError("Invalid value of number!")
- else:
- raise ValueError("Invalid value of number!")
- elif command == Command.INFO:
- print("\nApplication instructions:\n\t"
- "1) type '1' or 'add' to add a pair of number : name\n\t"
- "2) type '2' or 'del' to delete a pair of number : name\n\t"
- "3) type '3' or 'find' to find a name corresponding to the number\n\t"
- "4) type '7' or 'info' to get this information again\n\t"
- "5) type '0' or 'exit' to exit the program\n")
- elif command == Command.EXIT:
- print("\nEnd of program.")
- quit(0)
- def reader(hash_table):
- count = int(input())
- # print("Start the program.")
- # process(hash_table, 'info')
- for i in range(count):
- _input = input().split()
- if not _input:
- break
- temp, buff = *_input[:1], _input[1:]
- if len(buff) > 2:
- raise ValueError("Invalid value of name and number!")
- if temp.isdigit() and len(temp) == 1:
- temp = int(temp)
- process(hash_table, temp, buff)
- elif temp.isalpha():
- temp.lower()
- if temp in ('find', 'del', 'add', 'exit', 'info'):
- process(hash_table, temp, buff)
- def main():
- _hash = HashTable()
- reader(_hash)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement