【问题标题】:Printing a square matrix using conditions and operators in python在python中使用条件和运算符打印方阵
【发布时间】: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 是逻辑运算符,它们适用于布尔表达式。
  • 我已经编辑了带有输出的代码,有人可以再次打开问题吗?
  • 请将您的输入数据作为可读文本提供,而不是作为不恰当裁剪图像的链接。此外,请准确说明您认为“不正确”的内容以及您的期望。

标签: python function operators


【解决方案1】:

为什么你认为andor 应该给你准确的结果,看这个例子。

A[0,1]
B[1,1]
A[0] != B[0] and A[1] != B[1]
# True and False -> False
A[0] == B[0] or A[1] == B[1] 
# False or True -> True

【讨论】:

  • 感谢您澄清工作,但它仍然没有澄清疑问。例如,我正在比较 G[0] 和 G[2]。如果 G[0][2][i] == G[2][2][j] 和 G[0][1] != G[2][2][j] 和G[2][1] != G[0][2][j] 在这种情况下这个条件不应该为 TRUE 吗?
  • 我得到的输出为 [0,0,0,0,0,0,0,0,0,0]
  • @Sazee 我在您的代码中没有看到这种情况
  • @Sazee 请发送excatly输入输出数组和你的代码
  • 我提到的条件是:elif (D1[2][i] == D2[2][j]) and (D1[1] != D2[2][j]) and (D2[1] != D1[2][j]): Match1[1] = 1 return Match1
猜你喜欢
  • 2021-11-24
  • 2019-09-18
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多