Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Project: Coursework
Views: 61
import random import numpy global chanceoffarleft global chanceoffarright global chanceofcentreleft global chanceofcentreright global averageelectorate global seatsinparliament chanceoffarleft = 0.1 chanceoffarright = 0.1 chanceofcentreleft = 0.3 chanceofcentreright = 0.3 averageelectorate = 700 seatsinparliament = 650 def vote(): probs = [chanceoffarleft,chanceoffarright,chanceofcentreleft,chanceofcentreright,(1-(chanceoffarleft+chanceoffarright+chanceofcentreleft+chanceofcentreright))] e = ["farleft","farright","centreleft","centreright","disenfranchised"] return (numpy.random.choice(e, p=probs)) def constituencyelection(): votescast = 0 farleftvote = 0 farrightvote = 0 centreleftvote = 0 centrerightvote = 0 spoiltballots = 0 while votescast < averageelectorate: v = vote() if v == "farleft": farleftvote+=1 elif v == "farright": farrightvote+=1 elif v == "centreleft": centreleftvote+=1 elif v == "centreright": centrerightvote+=1 elif v == "disenfranchised": spoiltballots+=1 votescast+=1 if farleftvote == max(farleftvote, farrightvote, centreleftvote, centrerightvote): return "farleft victory", farleftvote, farrightvote, centreleftvote, centrerightvote elif farrightvote == max(farleftvote, farrightvote, centreleftvote, centrerightvote): return "farright victory", farleftvote, farrightvote, centreleftvote, centrerightvote elif centreleftvote == max(farleftvote, farrightvote, centreleftvote, centrerightvote): return "centreleft victory", farleftvote, farrightvote, centreleftvote, centrerightvote elif centrerightvote == max(farleftvote, farrightvote, centreleftvote, centrerightvote): return "centreright victory", farleftvote, farrightvote, centreleftvote, centrerightvote def generalelection(numberofelections = 10): global chanceoffarleft global chanceoffarright global chanceofcentreleft global chanceofcentreright global averageelectorate global seatsinparliament misrepresentationerror = [] while numberofelections > 0: seatsdecided = 0 farleftseats = 0 farrightseats = 0 centreleftseats = 0 centrerightseats = 0 totalfarleftvote = 0 totalfarrightvote = 0 totalcentrerightvote = 0 totalcentreleftvote = 0 while seatsdecided < seatsinparliament: s = constituencyelection() totalfarleftvote += s[1] totalfarrightvote += s[2] totalcentreleftvote += s[3] totalcentrerightvote += s[4] if s[0] == "farleft victory": farleftseats += 1 elif s[0] == "farright victory": farrightseats += 1 elif s[0] == "centreleft victory": centreleftseats += 1 elif s[0] == "centreright victory": centrerightseats += 1 seatsdecided += 1 error = int(100 * float(abs(totalfarleftvote/(seatsinparliament * averageelectorate) - farleftseats/seatsinparliament) + abs(totalfarrightvote/(seatsinparliament * averageelectorate) - farrightseats/seatsinparliament) + abs(totalcentreleftvote/(seatsinparliament * averageelectorate) - centreleftseats/seatsinparliament) + abs(totalcentrerightvote/(seatsinparliament * averageelectorate) - centrerightseats/seatsinparliament))) misrepresentationerror.append(error) if farleftseats == max(farleftseats, farrightseats, centreleftseats, centrerightseats): print("farleft government", totalfarleftvote, totalfarrightvote, totalcentreleftvote, totalcentrerightvote, farleftseats, farrightseats, centreleftseats, centrerightseats, error) elif farrightseats == max(farleftseats, farrightseats, centreleftseats, centrerightseats): print("farright government", totalfarleftvote, totalfarrightvote, totalcentreleftvote, totalcentrerightvote, farleftseats, farrightseats, centreleftseats, centrerightseats, error) elif centreleftseats == max(farleftseats, farrightseats, centreleftseats, centrerightseats): print("centreleft government", totalfarleftvote, totalfarrightvote, totalcentreleftvote, totalcentrerightvote, farleftseats, farrightseats, centreleftseats, centrerightseats, error) elif centrerightseats == max(farleftseats, farrightseats, centreleftseats, centrerightseats): print("centreright government", totalfarleftvote, totalfarrightvote, totalcentreleftvote, totalcentrerightvote, farleftseats, farrightseats, centreleftseats, centrerightseats, error) chanceoffarleft = (2/3) * (totalfarleftvote / (averageelectorate * seatsinparliament)) chanceoffarright = (2/3) * (totalfarrightvote / (averageelectorate * seatsinparliament)) chanceofcentreleft = (totalcentreleftvote / (averageelectorate * seatsinparliament)) + (1/6) * (totalfarleftvote / (averageelectorate * seatsinparliament)) chanceofcentreright = (totalcentrerightvote / (averageelectorate * seatsinparliament)) + (1/6) * (totalfarrightvote / (averageelectorate * seatsinparliament)) numberofelections -= 1 print misrepresentationerror p = list_plot(misrepresentationerror) print p generalelection()
('centreleft government', 45424, 45831, 136479, 136389, 0, 0, 338, 312, 60) ('centreleft government', 30367, 30291, 144335, 143850, 0, 0, 346, 304, 49) ('centreright government', 20080, 20224, 149125, 149291, 0, 0, 321, 329, 43) [60, 49, 43] Graphics object consisting of 1 graphics primitive