Я создаю .txt файл, в котором четыре солдата входят в команду, ранжирующую друг друга в порядке достоинств. Солдаты не ранжируются сами.
У меня есть следующий код:
import itertools
# create a list of 4 soldiers
numSoldiers=4
soldiers = []
for i in range(1,numSoldiers+1):
soldiers.append('soldier'+str(i))
# create list of all permutations of 2 soldiers
perms = list(itertools.permutations(soldiers, 2))
# list of possible rankings (soldier does not rank himself/herself)
possRanks = list(range(1,len(soldiers)))
# create the edgelist .txt file with randomized rankings
open('peerRankingsEdgelist.txt', 'w').close() #delete contents of .txt file at the start
file = open('peerRankingsEdgelist.txt', 'w')
for i in perms:
file.write(i[0] + ', ' + i[1] + '\n')
file.close() #close file
, который выдает следующий вывод в текстовом файле:
soldier1, soldier2
soldier1, soldier3
soldier1, soldier4
soldier2, soldier1
soldier2, soldier3
soldier2, soldier4
soldier3, soldier1
soldier3, soldier2
soldier3, soldier4
soldier4, soldier1
soldier4, soldier2
soldier4, soldier3
Для каждого набора из трех строк (наборов строк, начинающихся с одного и того же soldier
), я хочу добавить рандомизированное ранжирование, полученное из possRanks
, где possRanks = [1, 2, 3]
. Проблема в том, что я не могу полностью рандомизировать его, потому что тогда рейтинг может повториться. Например, soldier1
может ранжировать soldier2
и soldier3
с рейтингом 1
, чего у меня нет.
Правильный пример вывода будет следующим:
soldier1, soldier2, 3
soldier1, soldier3, 1
soldier1, soldier4, 2
soldier2, soldier1, 1
soldier2, soldier3, 2
soldier2, soldier4, 3
soldier3, soldier1, 2
soldier3, soldier2, 1
soldier3, soldier4, 3
soldier4, soldier1, 1
soldier4, soldier2, 2
soldier4, soldier3, 3
Здесь soldier1
ранжирует soldier2
со значением 3
, soldier3
со значением 1
и soldier4
со значением 2
.