Created
January 10, 2020 16:34
-
-
Save mostafaasadi/f9f1c742628661cbc3ad2a352b28eea4 to your computer and use it in GitHub Desktop.
a simple dictionary based on BST in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
class Node: | |
def __init__(self, word, mean): | |
self.lc = None | |
self.rc = None | |
self.word = word | |
self.mean = mean | |
class BST: | |
def __init__(self): | |
self.root = None | |
def insert(self, cn): | |
if self.root is None: | |
self.root = cn | |
else: | |
self.add(self.root, cn) | |
def add(self, cn, node): | |
if cn is not None: | |
if node.word <= cn.word: | |
if cn.lc: | |
self.add(cn.lc, node) | |
else: | |
cn.lc = node | |
elif node.word > cn.word: | |
if cn.rc: | |
self.add(cn.rc, node) | |
else: | |
cn.rc = node | |
def find(self, word): | |
return self.search(self.root, word) | |
def search(self, cn, word): | |
if cn is None: | |
return False | |
elif word == cn.word: | |
return cn | |
elif word < cn.word: | |
return self.search(cn.lc, word) | |
else: | |
return self.search(cn.rc, word) | |
def show(self): | |
self.iop(self.root) | |
def iop(self, cn): | |
if cn is not None: | |
self.iop(cn.lc) | |
print('\t', cn.word, cn.mean) | |
self.iop(cn.rc) | |
def filewrite(self, text, mode): | |
try: | |
f = open('bstlog', mode) | |
f.write(text) | |
f.close() | |
except Exception as e: | |
print('Error: File write', e) | |
def ios(self, cn): | |
if cn is not None: | |
self.ios(cn.lc) | |
self.filewrite(str(cn.word) + ':' + str(cn.mean) + '\n', 'a') | |
self.ios(cn.rc) | |
def save(self): | |
self.filewrite('', 'w') | |
self.ios(self.root) | |
def read(self): | |
try: | |
with open('bstlog') as f: | |
for l in f: | |
n = l.replace('\n', '').split(':') | |
self.insert(Node(n[0], n[1])) | |
except Exception: | |
self.filewrite('', 'w') | |
if __name__ == '__main__': | |
from pyfiglet import Figlet | |
from PyInquirer import prompt | |
Tree = BST() | |
Tree.read() | |
questions = [ | |
{ | |
'type': 'list', | |
'name': 'op', | |
'message': 'what can I do?', | |
'choices': ['Search', 'Add New Word', 'Show Words', 'Save & Exit'] | |
} | |
] | |
f = Figlet(font='slant') | |
print(f.renderText('BST Dictionary')) | |
print('\t\t By Mostafa Asadi ®\n\n') | |
while True: | |
answers = prompt(questions) | |
if answers['op'] == 'Search': | |
word = input('\tword: ') | |
sr = Tree.find(word) | |
if sr: | |
print('\tmean: ' + sr.mean) | |
else: | |
ao = input('\twe can not find it, do you want to add it? (y/n) ') | |
if ao == 'y': | |
mean = input('\tmean: ') | |
Tree.insert(Node(word, mean)) | |
elif answers['op'] == 'Add New Word': | |
word = input('\tword: ') | |
sr = Tree.find(word) | |
if sr: | |
print('\t ' + sr.word + ' is in database with meaning of ' + sr.mean) | |
else: | |
mean = input('\tmean: ') | |
Tree.insert(Node(word, mean)) | |
elif answers['op'] == 'Show Words': | |
Tree.show() | |
elif answers['op'] == 'Save & Exit': | |
Tree.save() | |
break | |
Tree.save() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
BSTDictionary
a simple dictionary based on BST in Python
Usage
pip install pyfiglet PyInquirer
python3 BSTDictionary.py
Package
mostafaasadi.ir/dl/BST_Dictionary.exe