#!/usr/bin/python3 import pickle import sys def recurse(tree): if type(tree).__name__ == 'NoneType': return input('I give up; what is it? ') elif type(tree).__name__ == 'str' and input('Is it %s? (y/n) ' % (tree)) == 'y': return tree elif type(tree).__name__ == 'str': new_animal = recurse(None) return { 'q':input('Please provide a question for which the answer for %s is yes and for which the answer for %s is no: ' % (tree, new_animal)), 'y':tree, 'n':new_animal } elif input('%s (y/n) ' % (tree['q'])) == 'y': return { 'q':tree['q'], 'y':recurse(tree['y']), 'n':tree['n'] } else: return { 'q':tree['q'], 'y':tree['y'], 'n':recurse(tree['n']) } try: handle = open('agg.pkl', 'rb') tree = pickle.load(handle) handle.close() except IOError: tree = None while (1): print('Think of an animal! (or press CTRL-D to exit)') try: tree = recurse(tree) except EOFError: print() sys.exit(0) handle = open('agg.pkl', 'wb') pickle.dump(tree, handle, -1) handle.close() print()