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
答
其实就是保持甲队不动,假设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]))