# How Voting Systems Work 2, Exercise 3: tactical switching and seats # Ten districts (assumed, invented numbers). Move k Green voters in every # district to their second choice, Blue, and watch the seats change. districts = [ {"Red": 40, "Blue": 35, "Green": 25}, {"Red": 38, "Blue": 36, "Green": 26}, {"Red": 42, "Blue": 33, "Green": 25}, {"Red": 37, "Blue": 38, "Green": 25}, {"Red": 39, "Blue": 34, "Green": 27}, {"Red": 36, "Blue": 39, "Green": 25}, {"Red": 41, "Blue": 34, "Green": 25}, {"Red": 38, "Blue": 37, "Green": 25}, {"Red": 40, "Blue": 35, "Green": 25}, {"Red": 35, "Blue": 38, "Green": 27}, ] for k in range(0, 11, 2): seats = {"Red": 0, "Blue": 0, "Green": 0} for d in districts: moved = min(k, d["Green"]) shifted = {"Red": d["Red"], "Blue": d["Blue"] + moved, "Green": d["Green"] - moved} seats[max(shifted, key=shifted.get)] += 1 print(f"{k:2d} Green voters switch per district: seats Red {seats['Red']}, Blue {seats['Blue']}, Green {seats['Green']}") # Output when run: # 0 Green voters switch per district: seats Red 7, Blue 3, Green 0 # 2 Green voters switch per district: seats Red 6, Blue 4, Green 0 # 4 Green voters switch per district: seats Red 5, Blue 5, Green 0 # 6 Green voters switch per district: seats Red 2, Blue 8, Green 0 # 8 Green voters switch per district: seats Red 1, Blue 9, Green 0 # 10 Green voters switch per district: seats Red 0, Blue 10, Green 0