Python入门到入狱 2021-11-11 14:45 采纳率: 81.8%
浏览 49
已结题

Python入门小练习,比赛名单推理题

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
a说他不和x比,c说他不和x,z比,请编程序找出匹配赛手的名单。
一道简单的推理题,用程序编就没思路了,写的程序只能实现排除掉题目给出的条件,不能只给出唯一对应的名单,有什么好的方法:

甲 = ['a','b','c']
乙 = ['x','y','z']
for i in 甲:
     for j in 乙:
          if ((i == 'a') and (j == 'x')) or \
             ((i == 'c') and ((j == 'x') or (j == 'z'))):
               continue
          print(i,'\t','VS','\t',j)

打印结果:

a      VS      y
a      VS      z
b      VS      x
b      VS      y
b      VS      z
c      VS      y
  • 写回答

1条回答 默认 最新

  • Mnioc 2021-11-11 16:09
    关注

    其实就是保持甲队不动,假设a第一个出战,b第二个出战,c第三个出战,对已队的出战循序进行排列组合,总共九种情况,找出满足条件的就行了

    #term_a: 'abc'
    term_b =  ["x", "y", "z"]
    
    for i in term_b:
        for j in term_b:
            for k in term_b:
    
                # 上面三层循环其实是求列表的全排列,
                # 第一层循环代表a的对手、第二层循环代表b的对手、第三层循环代表c的对手
                if i != j and i != k and j != k:
                    
                    # 这里根据逻辑判断即可
                    if i != 'x' and k != 'x' and k != "z":
                        print("a的对手:",i)
                        print("b的对手:",j)
                        print("c的对手:",k)
    

    当然还有更加清爽的玩法,逻辑跟上面的是一样的

    
    import itertools
     
    for i in itertools.permutations('xyz'):
        if i[0] != 'x' and i[2] != 'x' and i[2] != 'z':
            print('a vs %s, b vs %s, c vs %s' % (i[0], i[1], i[2]))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月19日
  • 已采纳回答 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 使用yolov5-7.0目标检测报错
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备