def menu(): team_id = input("Enter the Team ID: ") if os.path.isfile(team_id): with open(team_id, 'r') as f: json_data = json.load(f) team = Team.fromjson(json_data) else: team = Team(team_id) while (1): print("Menu") print("1# To add a Member's name,") print("2# To see the list of Members,") print("3# To set a Member as paid,") print("4# to delete a Member,") print("5# to see the list of paid Member,") print("6# to save the changes in a Json file,") print("0# to quit.") choice = int(input("Please, Enter your choice: ")) if choice == 1: rep = int( input( "Enter the total number of member's you want to enter: ")) if max_team_limit >= rep + len(team.members): for r in range(rep): team.add_member() else: print( "Reached Maximum limit, no more members can be added in the team" ) elif choice == 2: team.print_member_list() elif choice == 3: member_name = input( "Enter the member's name you want to set as paid: ") team.set_member_paid(member_name) elif choice == 4: member_name = input("Enter the member's name you want to delete: ") team.delete_member(member_name) elif choice == 5: team.paid_members() elif choice == 6: with open(team.team_id, 'w') as f: json.dump(team.json(), f) elif choice == 0: break
def basicSort(people, groupSize): allGroups = [] for run in range(0, 20): # do 5 random runs of algorithm, find best grouping peopleCopy = copy.deepcopy(people) print("RUN: " + str(run), end=": ") random.shuffle(people) while (len(peopleCopy) % groupSize != 0): blank = Person(-1, [""], "", 0, "", 0) blank.setPlaceHolder() peopleCopy.append(blank) for i in range( 0, len(peopleCopy)): #get everyones rankings of everyone else for j in range(0, len(peopleCopy)): if i != j: peopleCopy[i].preferences[ peopleCopy[j]] = peopleCopy[i].compare(peopleCopy[j]) peopleCopy[i].genRankings() for i in range(0, groupSize - 1): group1 = peopleCopy[i * (len(peopleCopy) // groupSize):(i + 1) * (len(peopleCopy) // groupSize)] group2 = peopleCopy[(i + 1) * (len(peopleCopy) // groupSize):min( (i + 2) * (len(peopleCopy) // groupSize), len(peopleCopy) )] #getting the 2 groups to compare rankings etc while ( len(group1) > 0 ): # while there are still groups to be matched with singles asker = group1[0] #get asker, and who is asking for possibleAsk in asker.rankings: # highest ranking in other group if possibleAsk in group2: toAsk = possibleAsk asker.rankings.remove(toAsk) break if not toAsk.inGroup( ): # if not in a group, add the person to the group and remove the asker from their group toAsk.groupMember = asker asker.groupMember = toAsk group1.remove(asker) else: #if toAsk prefers the asker to their current group member if (toAsk.rankings.index(asker) < toAsk.rankings.index( toAsk.groupMember)): group1.append(toAsk.groupMember) toAsk.groupMember = asker asker.groupMember = toAsk group1.remove(asker) for j in range((i + 1) * (len(peopleCopy) // groupSize), min((i + 2) * (len(peopleCopy) // groupSize), len(peopleCopy)) ): # i tells us how many group members they have toChange = peopleCopy[ j] # want to edit this person's preferenes based on their group member basedOff = toChange.groupMember for key in toChange.preferences.keys(): if (key != basedOff): toChange.preferences[key] = ( toChange.preferences[key] + basedOff.preferences[key]) / 2 peopleCopy[j].genRankings() #import pdb; pdb.set_trace(); groups = [] for i in range(0, len(peopleCopy) // groupSize): member = peopleCopy[i] newGroup = [] while (member not in newGroup): newGroup.append(member) member = member.groupMember groups.append(newGroup) allGroups.append(groups) print(groups) satisfactions = [] maxSatisfaction = 0 maxIndex = 0 for groupMatch in allGroups: forSum = [] for group in groupMatch: forSum.append(groupSatisfaction(group)) satisfactions.append(sum(forSum)) for i in range(0, len(satisfactions)): if (satisfactions[i] > maxSatisfaction): maxSatisfaction = satisfactions[i] maxIndex = i toConvert = allGroups[maxIndex] output = [] for indTeam in toConvert: toAdd = Team(people[0].event) for person in indTeam: if not person.placeholder: toAdd.add_member(person) output.append(toAdd) return output