コード例 #1
0
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
コード例 #2
0
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)
コード例 #4
0
    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_
コード例 #5
0
    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_
コード例 #6
0
    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_