自学Python:猜旅客国籍

作者: 小强聊成长 | 来源:发表于2022-01-10 13:08 被阅读0次

在一个旅馆中住着6个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字分别叫A、B、C、D、E和F,要说明的是名字的顺序与前面提到的国籍不一定是相互对应的。

现在已知:

1)A和美国人是医生。

2)E和俄罗斯人是教师。

3)C和德国人是技师。

4)B和F曾经当过兵,而德国人从未参过军。

5)法国人比A年龄大,意大利人比C年龄大。

6)B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假。

那么问题来了,求出A、B、C、D、E和F各是哪国人。

下面直接上代码:

########################

guo = [" ", "美国", "英国", "法国", "德国", "意大利", "俄罗斯"]

def guojia():

    #初始化条件矩阵

    a = []

    for i in range(7):

        b = []

        for j in range(7):

            b.append(j)

        a.append(b)

    for i in range(1, 7):  #条件矩阵每一列的第0号元素作为该列数据处理的标记

        a[0][i] = 1 #标记该列尚未处理

    a[1][1] = a[2][1] = a[3][1] = a[5][1] = 0      #输入条件矩阵中的各种条件

    a[1][3] = a[2][3] = a[3][3] = 0                        #0表示不是该国人

    a[1][4] = a[2][4] = a[3][4] = a[5][4] = a[6][4] = 0

    a[3][5] = 0

    a[1][6] = a[3][6] = a[5][6] = 0

    x = 0

    y = 0

    while a[0][1] + a[0][2] + a[0][3] + a[0][4] + a[0][5] + a[0][6] > 0:

        #当所有6列均处理完毕后退出循环

        for i in range(1, 7):    #i为列坐标

            if a[0][i] != 0:  #若该列尚未处理,则进行处理

                e = 0

                for j in range(1, 7):  #j变量保存行坐标,e变量是该列中非0元素的计数器

                    if a[j][i] != 0:

                        #统计每列中的非0元素个数

                        x = j  #x变量保存行坐标

                        y = i    #y变量保存列坐标

                        e += 1

                if e == 1:  #若该列只有一个元素为非零,则进行消去操作

                    for t in range(1, 7):

                        if t != i:

                            a[x][t] = 0  #将非零元素所在行的其他元素置0

                    a[0][y] = 0    #设置该列已处理完毕的标记

    print("矩阵最终状态为:")

    for i in range(7):

        print(a[i])

    print("推断结果为:")

    for i in range(1, 7):

        print(chr(ord('A') - 1 + i), '来自: ', end='')

        for j in range(1, 7):

            if a[i][j] != 0:

                print(guo[a[i][j]])

                break

if __name__ == '__main__':

    guojia()

########################

执行结果如下:

矩阵最终状态为:

[0, 0, 0, 0, 0, 0, 0]

[0, 0, 0, 0, 0, 5, 0]

[0, 0, 0, 0, 0, 0, 6]

[0, 0, 2, 0, 0, 0, 0]

[0, 0, 0, 0, 4, 0, 0]

[0, 0, 0, 3, 0, 0, 0]

[0, 1, 0, 0, 0, 0, 0]

推断结果为:

A 来自: 意大利

B 来自: 俄罗斯

C 来自: 英国

D 来自: 德国

E 来自: 法国

F 来自: 美国

________________END______________

相关文章

网友评论

    本文标题:自学Python:猜旅客国籍

    本文链接:https://www.haomeiwen.com/subject/ofuvqrtx.html