""" The code below derives from a thread on elections...@python.org where we were talking about tie-breaking techniques. There's a well known way that's actually used, but I was inspired to think about a game wherein the ballots are like playing cards in some ways, each encoded with a unique prime.
I've got some notes in the moderator queue at math-teach (lots of traffic), for which I'll share the URL. More in this month's elections-wg archive, public-facing. It's just another way to introduce the Fundamental Theorem of Arithmetic while reminding students of the composite vs. prime distinction. Standard fare. (CL) copyleft, K. Urner / 4Dsolutions.net, 2015 """ import random class Ballot: """secret: unique prime belongs to ballot itself """ def __init__(self): self.dna = random.choice(pool_of_primes) # this is done at the store pool_of_primes.remove(self.dna) def vote(self, name, vote=1): self.candidate = name self.approve = vote def __repr__(self): return "Ballot with prime {}".format(self.dna) pool_of_primes = [int(it) for it in """\ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239""".split()] # 52 in a deck in this example deck = [Ballot() for _ in range(52)] # two extra ballots were not used random.shuffle(deck) # dealt to voters (how many they get depends on how many candidates) # ballots coming in from voters all over the world!.... # each candidate on the slate gates same number of ballots cast stackA = [] for _ in range(26): secret_ballot = deck.pop() secret_ballot.vote("Shrek") stackA.append(secret_ballot) stackB = [] for _ in range(26): secret_ballot = deck.pop() secret_ballot.vote("Alice") stackB.append(secret_ballot) # the Vote! a TIE, 25 for each candidate! def break_tie(sA, sB): productA, productB = 1, 1 for idx in range(len(sA)): productA = productA * sA[idx].dna productB = productB * sB[idx].dna if productA == productB: print("The impossible happened") raise Exception if productA > productB: print("Shrek wins!") else: print("Alice wins!") break_tie(stackA, stackB) print("The crowd roars")
_______________________________________________ Edu-sig mailing list Edu-sig@python.org https://mail.python.org/mailman/listinfo/edu-sig