Вывод таблицы символов (английской и русской) (Python)

Тема: 
Циклы

В Python v.3 для строк используется кодировка Unicode. (Следует помнить, что в Python, в отличие от других языков программирования, вообще нет такого типа как одиночный символ; любой символ это строка, длина которой равна 1.)

Первые 128 символов по таблице Unicode такие же как и в таблице символов ASCII. Выведим их (начиная с пробела - 32-й символ). Чтобы привести вывод к табличной форме будем переходить на новую строку после каждого десятого символа (инструкция if в коде ниже).

Функция chr() возвращает символ из таблицы Unicode, соответствующий переданному коду-числу.

for i in range(32,128):
	print(chr(i), end=' ')
	if (i-2) % 10 == 0:
		print()
 
print()

Результат выполнения кода:

  
! " # $ % & ' ( ) * 
+ , - . / 0 1 2 3 4 
5 6 7 8 9 : ; < = > 
? @ A B C D E F G H 
I J K L M N O P Q R 
S T U V W X Y Z [ \ 
] ^ _ ` a b c d e f 
g h i j k l m n o p 
q r s t u v w x y z 
{ | } ~  

Но допустим, нам захотелось или потребовалось узнать коды символов русских букв (кирилицы). Таблица Unicode очень большая и включает почти все алфавиты Земли. Однако предположим, что кирилица должна быть закодирована где-то в начале таблицы (ведь русский - один из распространенных языков мира). Переберем коды символов от 256 до 10000), и если какой-либо код из этого диапазона соответствует русской букве (прописной или строчной), то выведем на экран сам код и букву, которой он соответствует.

for i in range(256,10000):
	if 'а'<=chr(i)<='я' or 'А'<=chr(i)<='Я':
		print(i,'-', chr(i))

Результат выполнения кода:

1040 - А
1041 - Б
1042 - В
1043 - Г
1044 - Д
1045 - Е
1046 - Ж
1047 - З
1048 - И
1049 - Й
1050 - К
1051 - Л
1052 - М
1053 - Н
1054 - О
1055 - П
1056 - Р
1057 - С
1058 - Т
1059 - У
1060 - Ф
1061 - Х
1062 - Ц
1063 - Ч
1064 - Ш
1065 - Щ
1066 - Ъ
1067 - Ы
1068 - Ь
1069 - Э
1070 - Ю
1071 - Я
1072 - а
1073 - б
1074 - в
1075 - г
1076 - д
1077 - е
1078 - ж
1079 - з
1080 - и
1081 - й
1082 - к
1083 - л
1084 - м
1085 - н
1086 - о
1087 - п
1088 - р
1089 - с
1090 - т
1091 - у
1092 - ф
1093 - х
1094 - ц
1095 - ч
1096 - ш
1097 - щ
1098 - ъ
1099 - ы
1100 - ь
1101 - э
1102 - ю
1103 - я

Теперь мы знаем коды русских букв по таблице Unicode. Но вывод получился какой-то некомпактный. К тому же мы видим, что буквы алфавита идут одна за другой. Поэтому достаточно сначала узнать только код первой большой буквы алфавита (прописные символы идут всегда впереди строчных) и код последней маленькой буквы алфавита. Кроме того, если мы нашли коды символов, то незачем далее продолжать цикл. Поэтому перепишем программу следующим образом:

first = 0
last = 0
for i in range(255,10000):
	if chr(i) == 'А':
		first = i
	elif chr(i) == 'я':
		last = i
		break # выход из цикла
 
j = 0		
for i in range(first,last+1):
	print(i,'-', chr(i), end=' ')
	j += 1
	if j%10 == 0: print()
 
print()

Результат выполнения кода:

1040 - А 1041 - Б 1042 - В 1043 - Г 1044 - Д 1045 - Е 1046 - Ж 1047 - З 1048 - И 1049 - Й 
1050 - К 1051 - Л 1052 - М 1053 - Н 1054 - О 1055 - П 1056 - Р 1057 - С 1058 - Т 1059 - У 
1060 - Ф 1061 - Х 1062 - Ц 1063 - Ч 1064 - Ш 1065 - Щ 1066 - Ъ 1067 - Ы 1068 - Ь 1069 - Э 
1070 - Ю 1071 - Я 1072 - а 1073 - б 1074 - в 1075 - г 1076 - д 1077 - е 1078 - ж 1079 - з 
1080 - и 1081 - й 1082 - к 1083 - л 1084 - м 1085 - н 1086 - о 1087 - п 1088 - р 1089 - с 
1090 - т 1091 - у 1092 - ф 1093 - х 1094 - ц 1095 - ч 1096 - ш 1097 - щ 1098 - ъ 1099 - ы 
1100 - ь 1101 - э 1102 - ю 1103 - я 

Ошибка

Я себе уже всю голову сломала. Начнем с того, что у меня пишет ошибку
ValueError: 1040 is not in required range
Traceback (most recent call last):
File "", line 1, in
File "", line 4, in test
ValueError: 1040 is not in required range

Второе, у меня в интерпретаторе берет код юникодовский, (но только я использую unichr вместо chr). А непосредственно в проекте (пишу в Visual Studio, код в файле .py) всё равно возвращает только ASCII. Уже и u приписывала, и encode делала. Бесполезно. Может посоветуете чего?

# вот рабочий вариант#

# вот рабочий вариант
# Portable Python 2.7.6.1
 
def getAllLettersRus():
    for item in range(1072, 1104):
        yield unichr(item)
 
 
if __name__ == '__main__':
    for rus in getAllLettersRus():
        print rus