【发布时间】:2021-11-04 21:43:54
【问题描述】:
我正在编写一个函数来使用 if、elif 条件匹配元组 (G) 的元素。元组 G 是一个 10 x 3 的元组。 G[0] 是学生 'S1' 与主管 'SP1' 和小组 'P1' 的信息,小组由三个成员组成。
数据结构如下:
[('S1', 'A8', ('A1', 'A2', 'A3')), ('S2', 'A5', ('A1', 'A2', 'A3')), ('S3', 'A6', ('A3', 'A4', 'A5')), ('S4', 'A1', ('A6', 'A7', 'A8')), ('S5', 'A4', ('A6', 'A7', 'A8')), ('S6', 'A2', ('A9', 'A10', 'A11')), ('S7', 'A3', ('A8', 'A9', 'A10')), ('S8', 'A4', ('A12', 'A13', 'A10')), ('S9', 'A10', ('A12', 'A13', 'A14')), ('S10', 'A11', ('A12', 'A13', 'A7'))]
匹配矩阵的定义为:
- “0”表示学生面板之间没有冲突。这意味着学生可以 在同一天被分配到相同的时间段,但必须在不同的房间。 因此,例如 S1、S8、S9 和 S1 之间没有冲突。
- “1”表示学生面板之间存在冲突。这是因为他们 有至少一名共同的小组成员。所以这些学生不能被分配到 同一天同一时间段。例如,S1、S2 和 S3 有公共面板 成员,因此它们相互冲突。
- “1*”表示学生在面板和面板上相互冲突 主管。所以这些学生不能被分配到同一个时间段 同一天。例如,S2 主管是 S3 的小组成员。
- “*”表示学生之间的冲突仅限于学期主管。在这种情况下, 这些学生可以在同一天被分配到不同的时间段 房间,但时间表质量会增加很多。
- 冲突总数列显示每行中的冲突数。为了 例如,S1 有 2 个冲突,S2 有 2 个冲突,S3 有 2 个冲突,依此类推。
我无法找到根据给定定义匹配元素并打印矩阵的方法:
尝试过的代码:
def matrix_generator(D1,D2,Match1):
for i in range(len(D1)):
for j in range(len(D2)):
if D1[2][i] != D2[2][j] and (D1[1] == D2[2][j]) or (D2[1] == D1[2][j]):
Match1[i][j] = "*"
if D1[2][i] == D2[2][j]:
Match1[i][j] = "1"
elif (D1[1] == D2[2][j]) or (D2[1] == D1[2][j]) and (D1[2][i] != D2[2][j]):
Match1[i][j] = "*1"
return Match1
Match1 = [[0 for i in range(10)] for j in range(10)]
for i in range(0,9):
for j in range(0,9):
aa= matrix_generator(G[i],G[j], Match1)
print(aa)
我得到了输出:
[['1', '*1', '*1', 0, 0, 0, 0, 0, 0, 0], ['1', '1', '*1', 0, 0, 0, 0, 0, 0, 0], ['*1', '*1', '1', 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
想要的输出是Matrix
有人能解释一下怎么做吗?
【问题讨论】:
-
使用函数时使用
return Match1而不是print(Match1)。 -
感谢@PCM 指出。我已经更新了代码。
-
and,or 是逻辑运算符,它们适用于布尔表达式。
-
我已经编辑了带有输出的代码,有人可以再次打开问题吗?
-
请将您的输入数据作为可读文本提供,而不是作为不恰当裁剪图像的链接。此外,请准确说明您认为“不正确”的内容以及您的期望。