Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Примитивный скрипт на Python для заучивания английских слов либо отчего я не использую карточки

Anna | 15.06.2014 | нет комментариев
На прогре теснее не раз подымалась тема постижения английского языка (пруф). Она рассматривалась с различных ракурсов. Кто-то писал, что не для чего учить слова, при постижении иностранного. Кто-то делился методами, коих великое уйма, от примитивных карточек, до целой тетради, исписанной по самое не хочу. В конце концов есть LinguaLeo, так же восхитительный сервис, на котором без дополнительной платы дозволено учить по 10 слов в день. Правда изредка платить не хочется, а 10 слов кажутся крайне небольшим число для молодого организма, тот, что познает таинства и прелести зарубежной мовы. Тогда допустимо данный скрипт вам будет пригоден.

К чертям GUI!

Нет. Не вообще к чертям, а в данной задаче. Все что нам требуется это прочитать слово, написать его перевод и нажать клавишу Enter. Достаточно примитивный механизм работы. Так для чего же напрягаться и насиловать ради этого tkinter?

JSON торопится нам на поддержка

Здесь безусловно на любителя. Я применял JSON. Кому-то по нраву XML. Конструкция данных будет достаточно простая.

{
"catch, caught, caught":"ловить, хватать, поспеть",
"fly, flew, flown":"летать, пролетать"
}

Сберегаем сходственный «словарь» из 2-х слов в файл, тот, что мы назовем для примера english.json, а что бы ненужный раз не настраивать локаль сберегаем его в кодировке Windows 866 (уверен, что для Linux подойдет UTF-8).

Его сиятельство код

Перво-наперво импортируем модуль sys, и модуль random.

import sys
import random

Дальше мы невзначай для себя определяем классическую функцию main. По плану, она сразу же затребует словарь, тот, что будет нужно указать в параметрах при запуске скрипта.

def main():
	try:
		wordict = eval(open(sys.argv[1]).read()) # открываем словарь
	except:
		print "You have to enter all parameters.\nExample: python wordrepeater.py yourdictionary.json" #вроде бы довольно информативно?
		raw_input("")

Сейчас у нас есть словарь wordict. Дальше необходимо сделать два режима прохода по словарю. 1-й — скрипт выдает нам английское слово, а мы в результат один из его переводов. 2-й проход прямо противоположный — скрипт нам русское слово, а мы ему английское. Тут на поддержка приходит конструктор словарей.

	mode = raw_input("Choose mode:\n\t1:Word To Translation;\n\t2:Translation To Word.\n>> ");
	if mode == "2": wordict = {wordict[k]:k for k in wordict.keys()} #здесь не хитроумным образом ключи словаря меняются местами с их значениями.

Позже проделанных манипуляций остается несколько строчек, которые и будут осуществлять прогон по каждому словарю. Дозволено их описать внутри функции main, правда я выбрал описать еще одну функцию.

def keysToValues(dic): # функции понадобится словарь для работы
	wrong = 0 # фиксируем число ошибок
	keys = dic.keys() # извлекаем список со всеми ключами нашего словаря.
	while True:
		tmpkey = random.choice(keys)  # извлекаем случайное слово из словаря
		print "{0}: {1}".format(len(keys), tmpkey)  # выводим слово на экран. Совместно с ним выводится счетчик оставшихся слов
		value = dic[tmpkey] # запоминаем все значения этого слова 
		if raw_input("Translation: ") in value.split(", "): # пишем наш "верный" результат, тот, что сразу же сравнивается с любым из значений
			print "True. {0}\n".format(value)
			keys.remove(tmpkey) # ура! верно! слово удаляется из списка.
		else:
			wrong  = 1
			print "Wrong! {0}\n".format(value) # упс... на одну ошибку огромнее.
		if len(keys) < 1: # все слова угаданы. В нашем спуске нет ни одного слова.
			raw_input("\n\nNothing\nWrong - {0}".format(wrong))  # тут будет написано число ошибок
			sys_exit() # позже нажатия Enter, все закончится

Все что осталось сделать — это запустить эту функцию в main, а позже запустить main.

	keysToValues(wordict)

if __name__ == "__main__":
	main()

При наличии свободного времени и этого скрипта, получается выучить до 50 (огромнее я не пробовал) английских слов за вечер. Самое изнурительное это заполнять словарь. Но я уверен, что это не изнурительней составления карточек.

Итоговый итог.

Для большего комфорта каждый код в одном месте.

import sys
import random

def keysToValues(dic):
	wrong = 0
	right = 0
	keys = dic.keys()
	while True:
		tmpkey = random.choice(keys)
		print "{0}: {1}".format(len(keys), tmpkey)
		#print str(len(keys)) ":", tmpkey
		value = dic[tmpkey]
		#answ = raw_input("Translation: ")
		if raw_input("Translation: ") in value.split(", "):
			print "True. {0}\n".format(value) #fjf
			right  = 1
			keys.remove(tmpkey)
		else:
			wrong  = 1
			print "Wrong! {0}\n".format(value)
		if len(keys) < 1:
			raw_input("\n\nNothing\nRight - {0}. Wrong - {1}".format(right, wrong))
			sys_exit()

def main():
	try:
		wordict = eval(open(sys.argv[1]).read())
	except:
		print "You have to enter all parameters.\nExample: python wordrepeater.py yourdictionary.json"
		raw_input("")
	mode = raw_input("Choose mode:\n\t1:Word To Translation;\n\t2:Translation To Word.\n>> ");
	if mode == "2": wordict = {wordict[k]:k for k in wordict.keys()}
	elif mode == "":
		print "Exit"
		sys.exit()

	keysToValues(wordict)

if __name__ == "__main__":
	main()
 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB