Как я могу смоделировать масштабируемый набор пар определение / термин?

#dictionary #scalability #python

#словарь #масштабируемость #python

Вопрос:

Прямо сейчас в моей карточной игре используется prepvocab() метод, в котором я

  • определите термины и переводы для терминов на неделю в виде словаря
  • добавьте описание терминов этой недели
  • объедините их в список словарей, где пользователь выбирает свои «недели» для изучения

Каждый раз, когда я добавляю термины и переводы на новую неделю, я застрял, добавляя еще один элемент в список доступных словарей. Я определенно вижу, что это не очень хорошо.

 class Vocab(object):

def __init__(self):
    vocab = {}
    self.new_vocab = vocab
    self.prepvocab()

def prepvocab(self):
    week01 = {"term":"translation"} #and many more...
    week01d = "Simple Latvian words"

    week02 = {"term":"translation"}
    week02d = "Simple Latvian colors"

    week03 = {"I need to add this":"to self.selvocab below"}
    week03d = "Body parts"

    self.selvocab = [week01, week02] #, week03, weekn]
    self.descs = [week01d, week02d] #, week03, weekn]
    Vocab.selvocab(self)

def selvocab(self):
    """I like this because as long as I maintain self.selvocab,
    the for loop cycles through the options just fine"""
    for x in range(self.selvocab):
        YN = input("Would you like to add week " 
                     repr(x   1)   " vocab? (y or n) n" 
                   "Description: "   self.descs[x]   " ").lower()
        if YN in "yes":
            self.new_vocab.update(self.selvocab[x])
    self.makevocab()
  

Я определенно вижу, что это будет проблемой с 20 вопросами «да, нет». В данный момент я читаю curses и думал о том, чтобы распечатать все описания сразу и позволить пользователю выбрать все, что они хотели бы изучить для раунда.

Как мне лучше поддерживать эту часть моего кода? У кого-нибудь был радикальный пересмотр, который не был таким … процедурным?

Ответ №1:

Вы должны каким-то образом сохранить свои пары термин: перевод и описания в текстовом файле. Затем ваша программа должна проанализировать текстовый файл и найти все доступные уроки. Это позволит вам расширить набор доступных уроков без необходимости редактировать какой-либо код.

Что касается вашего выбора уроков, напишите print_lesson_choices функцию, которая отображает доступные уроки и описания для пользователя, а затем запрашивает их ввод при их выборе. Вместо того, чтобы задавать вопрос о них для каждого урока, почему бы не сделать ваше приглашение чем-то вроде:

 self.selected_weeks = []

def selvocab(self):
    self.print_lesson_choices()
    selection = input("Select a lesson number or leave blank if done selecting: ")
    if selection == "": #Done selecting
        self.makevocab()
    elif selection in self.available_lessons:
        if selection not in self.selected_weeks:
            self.selected_weeks.append(selection)
            print "Added lesson %s"%selection
        self.selvocab() #Display the list of options so the user can select again
    else:
        print "Bad selection, try again."
        self.selvocab()
  

Комментарии:

1. Спасибо за ваше предложение. Я изучил это, и, хотя мне не нравится идея покидать мир python ради такого простого учебного пособия, я нашел это , и это то, что я искал (конечно, это перебор).

Ответ №2:

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