from random import randint, choices # item #collection clltn = [] # card = title, due, interval def generate_card (clltn=[], user="bob", shared=False): id = len(clltn) + 1 title = "".join([chr(randint(ord('a'), ord('z'))) for i in range(5)]) due = -1 #means new interval = 0 owned_by = user card = id, title, due, interval, owned_by, shared return card def generate_clltn (n_of_cards): clltn = [] #mogoče bi blo dobro met dictionary, sam žeštejemo len zgoraj... for n in range(n_of_cards): clltn.append(generate_card(clltn=clltn)) return clltn # USER ## config max_due = 2 max_new = 1 max_deck_size = max_new + max_due # setup user_clltn = generate_clltn(100) # generate deck ##1 SR - super-memo style def get_new(user_clltn, n_of_cards): for card in user_clltn: pass def get_due(user_clltn, n_of_cards): pass def generate_deck_sr(user_clltn, max_new, max_deck_size): pass def run_sr(): pass #2 Probabilistic ## problem je, da pri probabilističnem težko nardiš, da pač en dan ni nič v decku, ker pač vedno izbere glede določeno število pač glede na uteži def generate_weights(user_clltn, max_deck_size): """generiramo uteži za due in new cards posebej; vrne tuple dveh listov za weightse...""" weights_due = [] weights_new = [] for card in user_clltn: #problem je edgecase, ko ni populacije kar propade... if len(user_clltn) 0: weights_due.append(due) weights_new.append(0) else: weights_due.append(0) weights_new.append(1) return weights_new, weights_due #TODO def generate_deck_prob(user_clltn, max_deck_size, max_new): deck = [] for c in range(max_deck_size): deck.append(user_clltn[c]) # tu vzame prvic ampak moralo bi random c brez ponavljanja obteženih z "due". rabimo tudi naključnih/najnovejših? max_new novih cardov. """ if sum(weights_due)>0: #due dck = choices(user_clltn, cum_weights=weights_new, k=max_due) dck_new = choices(user_clltn, k=max) #new #?? else: dck = choices(user_clltn, k=max_new) """ return deck def prob_eval(card): id, title, due, interval, owned_by, shared = card #due je tukaj interest rate print("intrest rate je: ", due) gumb = input("A te " + title + " zanima?") # predpostalvjmao y = yes, m = maybe, n = no if gumb == "y": due = 0.99 elif gumb == "m": due = abs(due / 1.3) #abs je zato, ker "new" kodirano ko -1 # /1.3 in /2 sta na pamet izbrani funkciji elif gumb=="n": due = abs(due / 2) card_mod = id, title, due, interval, owned_by, shared return card_mod #TODO def run_prob(deck, user_clltn): #tu more dejansko spremenit collection... deck_mod = [] for c in deck: c = prob_eval(c) deck_mod.append(c) return deck_mod # engine # random python stuff ## kako najt tuple v listu in ga spremeniti? ## kako vzet weight iz tuple in ga assignat pri izbiranju? print(generate_weights(user_clltn, max_deck_size))