Pavel2903
Янв. 10, 2022 08:00:23
Друзья, прошу вас о помощи, выпускной курс, учусь на лингвистике, английский и китайский язык, появился предмет программирование, используем гугл колаб, не понимаю ничего от слова совсем, для экзамена необходимо написать два кода, голосование по копленду и голосование по Шульцу, настолько просто насколько возможно, я в отчаянии, надеюсь на вашу помощь и понимание, хотя бы совет как это сделать, структура и что писать, буду безмерно благодарен каждому. Решение:
1) Функция для случайной генерации возможных предпочтений для заданного количества кандидатов и случайной генерации количества избирателей, предпочитающих каждую из цепочек предпочтений. Вход: количество кандидатов для голосования. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
2) Функция для чтения входных данных из файла (альтернативный способ получения входных данных). Вход: имя файла. Выход: словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку
3) Функция реализации подсчета голосов по одному из методов (см. далее в задачах). На входе функции – словарь, где ключ – цепочка предпочтений, значение – количество проголосовавших за эту цепочку. Выход: победитель; интерпретация решения.
4) Запись в файл результатов голосования.
py.user.next
Янв. 10, 2022 22:45:52
Pavel2903
необходимо написать два кода, голосование по копленду и голосование по Шульцу
Найди эти методы (Шульце и Коупленда) и подробно опиши здесь.
xam1816
Янв. 11, 2022 00:18:48
это не Шульце, вообще хз что, но думаю что-то в этом есть
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УРА!!!!выборы!выборы!Кандидаты пид...кхм.кхм..")