Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 10, 2022 08:00:23

Pavel2903
Зарегистрирован: 2022-01-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Крик о помощи

Друзья, прошу вас о помощи, выпускной курс, учусь на лингвистике, английский и китайский язык, появился предмет программирование, используем гугл колаб, не понимаю ничего от слова совсем, для экзамена необходимо написать два кода, голосование по копленду и голосование по Шульцу, настолько просто насколько возможно, я в отчаянии, надеюсь на вашу помощь и понимание, хотя бы совет как это сделать, структура и что писать, буду безмерно благодарен каждому. Решение:
1) Функция для случайной генерации возможных предпочтений для заданного количества кандидатов и случайной генерации количества избирателей, предпочитающих каждую из цепочек предпочтений. Вход: количество кандидатов для голосования. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
2) Функция для чтения входных данных из файла (альтернативный способ получения входных данных). Вход: имя файла. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
3) Функция реализации подсчета голосов по одному из методов (см. далее в задачах). На входе функции – словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку. Выход: победитель; интерпретация решения.
4) Запись в файл результатов голосования.

Отредактировано Pavel2903 (Янв. 10, 2022 10:45:40)

Офлайн

#2 Янв. 10, 2022 22:45:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Крик о помощи

Pavel2903
необходимо написать два кода, голосование по копленду и голосование по Шульцу
Найди эти методы (Шульце и Коупленда) и подробно опиши здесь.



Офлайн

#3 Янв. 11, 2022 00:18:48

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1309
Репутация: +  113  -
Профиль   Отправить e-mail  

Крик о помощи

это не Шульце, вообще хз что, но думаю что-то в этом есть

 import random as rd
#
candidates = ['A', 'B', 'C'] # это кандидаты
#
def to_vote(candidates_lst, num_voters):
    """
    :param candidates_lst: list список кандидатов
    :param num_voters: int число избирателей
    :return: dict словарь где ключ - цепочка предпочтений, значение - кол-во проголосовавших за цепочку
    """
    out = {}
    for i in range(num_voters):
        rd.shuffle(candidates_lst)
        if tuple(candidates_lst) in out:
            out[tuple(candidates_lst)] += 1
        else:
            out[tuple(candidates_lst)] = 1
    return out
#
def calc_winner(voter_preferences_dct):
    """
    :param voter_preferences_dct: dict словарь с предпочтениями избирателей
    :return: dict отсортированный словарь где ключ - кандидат, значение - "антирейтинг"
    """
    calc_result = dict.fromkeys(list(voter_preferences_dct.keys())[0],0) # здесь подготавливается словарь с кандидатами
    for k, v in voter_preferences_dct.items():
        for i in range(len(k)):
            calc_result[k[i]] += (i*v) # антирейтинг = индекс в кортеже * кол-во избирателей,т.е чем ближе к 0 тем лучше
                                    #
    return dict(sorted(calc_result.items(), key= lambda i: i[1]))
#
pref = to_vote(candidates, 3)
for k, v in pref.items():
    print(k, '=>', v)
res = calc_winner(pref)
print("\nрезултаты выборов:")
print(res, f'победил кандидат "{list(res.keys())[0] if list(res.values())[0] < list(res.values())[1] else "...эээ, тогда тяням спичку"}"')
print("\nУРА!!!!выборы!выборы!Кандидаты пид...кхм.кхм..")

Офлайн

#4 Янв. 11, 2022 07:07:55

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Крик о помощи

https://github.com/mgp/schulze-method/blob/master/schulze.py
https://codereview.stackexchange.com/questions/42359/condorcet-voting-method-in-oop-python
по поводу колаба
https://www.youtube.com/watch?v=inN8seMm7UI
зы шульц в псевдокоде https://en.wikipedia.org/wiki/Schulze_method



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 11, 2022 07:17:17)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version