Форум сайта python.su
Друзья, прошу вас о помощи, выпускной курс, учусь на лингвистике, английский и китайский язык, появился предмет программирование, используем гугл колаб, не понимаю ничего от слова совсем, для экзамена необходимо написать два кода, голосование по копленду и голосование по Шульцу, настолько просто насколько возможно, я в отчаянии, надеюсь на вашу помощь и понимание, хотя бы совет как это сделать, структура и что писать, буду безмерно благодарен каждому. Решение:
1) Функция для случайной генерации возможных предпочтений для заданного количества кандидатов и случайной генерации количества избирателей, предпочитающих каждую из цепочек предпочтений. Вход: количество кандидатов для голосования. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
2) Функция для чтения входных данных из файла (альтернативный способ получения входных данных). Вход: имя файла. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
3) Функция реализации подсчета голосов по одному из методов (см. далее в задачах). На входе функции – словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку. Выход: победитель; интерпретация решения.
4) Запись в файл результатов голосования.
Отредактировано Pavel2903 (Янв. 10, 2022 10:45:40)
Офлайн
Pavel2903Найди эти методы (Шульце и Коупленда) и подробно опиши здесь.
необходимо написать два кода, голосование по копленду и голосование по Шульцу
Офлайн
это не Шульце, вообще хз что, но думаю что-то в этом есть
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УРА!!!!выборы!выборы!Кандидаты пид...кхм.кхм..")
Офлайн
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
Отредактировано AD0DE412 (Янв. 11, 2022 07:17:17)
Офлайн