Skip to content

Instantly share code, notes, and snippets.

@mostafaasadi
Created January 10, 2020 16:34
Show Gist options
  • Save mostafaasadi/f9f1c742628661cbc3ad2a352b28eea4 to your computer and use it in GitHub Desktop.
Save mostafaasadi/f9f1c742628661cbc3ad2a352b28eea4 to your computer and use it in GitHub Desktop.
a simple dictionary based on BST in Python
# -*- 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()
@mostafaasadi
Copy link
Author

BSTDictionary

a simple dictionary based on BST in Python

Screenshot (121)

Usage

  • pip install pyfiglet PyInquirer
  • python3 BSTDictionary.py

Package

mostafaasadi.ir/dl/BST_Dictionary.exe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment