#
# -*- coding: KOI8-R -*-
# Python 2.3

# Стандартные модули:

import os
import locale
import copy
import cPickle as pickle


# Локализация:

codText = 'KOI8-R'	# Кодировка исходного текста программы
codCon	= locale.getdefaultlocale()[1]	# Кодировка консоли
if os.name=='nt': codCon = 'CP866'

def s_(str):	# Перекодирует строку из кодировки текста в кодировку консоли
	return str.encode(codCon)

def s_in(str): # Перекодирует стандартный ввод в UNICODE
	return unicode(str, codCon)


# Глобальные объекты:

tree = [] # Дерево - БД
filename = 'tree.dat'


# Функции:

yesno = lambda: s_in(raw_input(s_(u'(д/н) > '))) == u'д'


# Программа:

print s_(u'Самообучающаяся программа "Животные".\n\nЗагрузка БД...')


try:
	tree = pickle.load(open(filename, 'r'))
except:
	tree = [u'Он большой', [u'кит', False, False], [u'кот', False, False]]

print s_(u'Успешно.')


while True:
	if s_in(raw_input(s_(u'\nЗагадайте животное и нажмите [Ввод]\nили введите в для выхода\n> '))) == u'в': break
	
	curnode = tree
	
	while True:
		if curnode[1] <> False:
			print s_(curnode[0]),'? ',
			
			curnode = curnode[1+int(not yesno())]
		else:
			print s_(u'Это '+curnode[0]),'? ',
			
			if yesno(): break
			
			for i, v in enumerate([s_in(raw_input(s_(u'Чем он(она/оно) отличается от '+curnode[0]+'? > '))),
					[s_in(raw_input(s_(u'Как его называют? > '))), False, False],
					copy.copy(curnode)]):
				curnode[i] = v
			
			break


print s_(u'\nЗапись БД в файл...')
outfile = open(filename, 'w')
p = pickle.dump(tree, outfile, False)
outfile.flush()
outfile.close()
print s_(u'Успешно.\nКонец программы.')
