def flere_vinnere(kandidat_over_sperregrense, score, stemmesedler, kandidater, out_status): valgt_kandidat = 0 print_status(out_status, '\nMinst 2 kandidater har flest, og like mange stemmer:') print(kandidat_over_sperregrense) for i in range(len(kandidat_over_sperregrense)): print_status( out_status, '\n' + str(kandidater[kandidat_over_sperregrense[i]]) + '\t:\t' + str(score[kandidat_over_sperregrense[i]])) print_status(out_status, '\n---' '\nNeste stemmefordeling:') secondary_score = [] for i in range(len(kandidater)): secondary_score.append(0) temp_pos = len(kandidater) - 1 stemme_telles = False for i in range(len(stemmesedler)): for j in range(len(stemmesedler[i])): if (stemmesedler[i][j] < stemmesedler[i][temp_pos]) or ( stemmesedler[i][temp_pos] < 0): if stemmesedler[i][j] >= 0: temp_pos = j stemme_telles = True if stemme_telles == True: secondary_score[temp_pos] += 1 # Nullstill for neste stemme temp_pos = len(kandidater) - 1 stemme_telles = False #Velg kandidat med flest net høyeste stemmer kandidat_over = -1 print("MAX") print(max(secondary_score)) for i in range(len(kandidat_over_sperregrense)): print_status( out_status, '\n' + kandidater[kandidat_over_sperregrense[i]] + '\t:\t' + str(secondary_score[i])) print_status(out_status, '\n---') valgt_kandidat = secondary_score.index(max(secondary_score)) return valgt_kandidat
def forste_opptelling(stemmesedler, kandidater, out_status, out_deep_status): first_count = [] score = [] for i in range(len(kandidater)): score.append(0) for i in range(len(stemmesedler)): for j in range(len(stemmesedler[0])): if stemmesedler[i][j] is 1: score[j] = score[j] + 1 stemmesedler[i][j] = -2 tekst = '\n\nFørste opptelling.\nKandidater med score:' print_status(out_status, tekst) print_status(out_deep_status, tekst) for i in range(len(kandidater)): name_spacing = ' ' * (len(max(kandidater, key=len)) - len(kandidater[i])) tekst = str('\n' + kandidater[i]) + name_spacing + '\t:\t' + str( score[i]) print_status(out_status, tekst) print_status(out_deep_status, tekst) return score
def forste_opptelling(stemmesedler, kandidater, out_status, out_deep_status): first_count = [] score = [] oversikt = np.zeros(shape=np.shape(stemmesedler)) score = np.zeros(shape=np.shape(kandidater)) for i in range(len(stemmesedler)): for j in range(len(stemmesedler[i])): if stemmesedler[i][j] is 1: score[j] = score[j] + 1 oversikt[i][j] = -2 for i in range(len(oversikt)): for j in range(len(oversikt[i])): if oversikt[i][j] < -1: for k in range(len(oversikt)): if oversikt[k][j] > -2: oversikt[k][j] = -1 tekst = '\n\nFørste opptelling.\nKandidater med score:' print_status(out_status, tekst) print_status(out_deep_status, tekst) for i in range(len(kandidater)): name_spacing = ' ' * (len(max(kandidater, key=len)) - len(kandidater[i])) tekst = str('\n' + kandidater[i]) + name_spacing + '\t:\t' + str( score[i]) print_status(out_status, tekst) print_status(out_deep_status, tekst) return np.array(score), np.array(oversikt)
def kandidat_med_ferrest_stemmer(kandidater_, low_score_): cand_under = [] for i_ in range(len(kandidater_)): if score[i_] == low_score_: cand_under.append(i_) # Hvis flere enn 1 velg en random if len(cand_under) > 1: choose_cand_ = cand_under[randint(0, len(cand_under) - 1)] print(choose_cand_) else: choose_cand_ = cand_under[0] tekst = '\n' + str(kandidater_[choose_cand_]) + ' har tapt med ' + str( round(low_score_, 1)) + ' stemmer.' print_status(out_status, tekst) print_status(out_deep_status, tekst) return choose_cand_
def kandidat_med_flest_stemmer(kandidater_, high_score_, score_, stemmesedler_): cand_over = [] # Velg flere kandidater om de alle har like mange og flest poeng for i_ in range(len(kandidater_)): if score[i_] == high_score_: cand_over.append(i_) # Hvis flere enn 1 velg en random if len(cand_over) > 1: choose_cand_ = flere_vinnere(cand_over, score_, stemmesedler_, kandidater_, out_status) print(choose_cand_) else: choose_cand_ = cand_over[0] tekst = '\n' + str( kandidater_[choose_cand_]) + ' har vunnet med ' + str( round(high_score_, 2)) + ' stemmer.' print_status(out_status, tekst) print_status(out_deep_status, tekst) return choose_cand_
def ny_fordeling(score_, choose_cand_, sperregrense_, kandidater_, stemmesedler_): antall_stemmer_refordeles = 0 # Ta første persom som har vunnet og fordel dens stemmer på nytt. fordeling = [] fordel_fordeling = [] for i in range(len(kandidater_)): fordeling.append(0) fordel_fordeling.append(0) print('choose_cand_: ' + str(choose_cand_)) # Merk alle stemmesedler med -2 for den som har vunnet for i in range(len(stemmesedler_)): hoyeste_stemme = 100000000000 for j in range(len(stemmesedler_[i])): if stemmesedler_[i][j] < hoyeste_stemme and stemmesedler_[i][ j] > 0: hoyeste_stemme = j if hoyeste_stemme == choose_cand_: stemmesedler_[i][choose_cand_] = -2 # Se gjennom alle stemmesedlene for i in range(len(stemmesedler_)): # Hvis stemmeseddel i, som har 1 i samme posisjon som vinnende kandidat if stemmesedler_[i][choose_cand_] == -2: # Tell antall stemmer som skal refordeles antall_stemmer_refordeles += 1 # Se gjennom alle posisjoner i den stemmeseddelen # Nullstill den vinnende stemmens posisjon stemmesedler_[i][choose_cand_] = -1 leter_etter_neste_preferanse = True preferanse = 1 posisjon = 0 while (leter_etter_neste_preferanse): if stemmesedler_[i][ posisjon] == preferanse and score_[posisjon] != -1: fordeling[posisjon] += 1 leter_etter_neste_preferanse = False # Sett den stemmeseddelen til å bli satt som brukt for sin posisjon, så den ikke kan gå til # samme person en gang til. stemmesedler_[i][posisjon] = -2 else: posisjon += 1 if posisjon >= len(stemmesedler_[i]): posisjon = 0 preferanse += 1 if preferanse >= len(stemmesedler_[i]): posisjon = 0 preferanse = 1 leter_etter_neste_preferanse = False score_gammel = [] for i in range(len(score_)): score_gammel.append(score_[i]) if antall_stemmer_refordeles == 0: print('Ingen stemmer å fordele :-(') else: fordelingsnokkel = (score_[choose_cand_] - sperregrense_) / antall_stemmer_refordeles for i in range(len(fordeling)): fordel_fordeling[i] = fordeling[i] * fordelingsnokkel for i in range(len(score_)): score_[i] = score_[i] + fordel_fordeling[i] score[choose_cand_] = -1.0 tekst = "\nStemmene til " + str(kandidater[choose_cand_] + " er fordelt:") print_status(out_status, tekst) print_status(out_deep_status, tekst) for i in range(len(score_)): if score_[i] > 0: name_spacing = ' ' * (len(max(kandidater, key=len)) - len(kandidater[i])) tekst = '\n' + str(kandidater[i]) + name_spacing + '\t:\t' + str(round(score_gammel[i], 1)) + '\t+\t' \ + str(round(fordel_fordeling[i], 1)) + '\t=\t' + str(round(score_[i], 1)) print_status(out_status, tekst) print_status(out_deep_status, tekst) return score_, stemmesedler_