目录

前言

一、王教授是哪里人

1.题目

2.代码实现

3.运行结果

 二、谁是班委

1.题目

2.代码实现

3.运行结果

三、谁出国学习

1.题目

2.代码实现

3.运行结果

总结


前言

离散数学(第2版)

使用python实现命题逻辑等值演算应用题。


一、王教授是哪里人

1.题目

在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:

甲:王教授不是苏州人,是上海人。
乙:王教授不是上海人,是苏州人。
丙:王教授既不是上海人,也不是杭州人。

听完这3人的判断后,王教授笑着说,你们3人中有一人说得全对,有一人说对了一半,另一人说得全不对。分析王教授到底是哪里人。(书本P25)

2.代码实现

代码如下:

# p:是苏州人 q:是上海人 r:是杭州人
ls = [0, 1]
for p in ls:
	for q in ls:
		for r in ls:
			A1 = not p and q
			A2 = (not p and not q)or(p and q)
			A3 = p and not q  # 甲的话的三种情况
			B1 = p and not q
			B2 = (p and q)or(not p and not q)
			B3 = not p and q  # 乙的话的三种情况
			C1 = not q and not r
			C2 = (not q and r)or(q and not r)
			C3 = q and r  # 丙的话的三种情况
			if ((A1 and B2 and C3) or (A1 and B3 and C2) or (A2 and B1 and C3) or\
				(A2 and B3 and C1) or (A3 and B1 and C2) or (A3 and B2 and C1)) == 1\
				and p+q+r == 1:  # 成立一项
				if p == 1:
					print('王教授是苏州人.')
				if q == 1:
					print('王教授是上海人.')
				if r == 1:
					print('王教授是杭州人.')

3.运行结果


 二、谁是班委

1.题目

在某班班委成员的选举中,已知王小红、李强、丁金生三位同学被选进了班委会。该班的甲,乙,丙三名同学预言如下:

甲:王小红为班长,李强为生活委员。
乙:丁金生为班长,王小红为生活委员。
丙:李强为班长,王小红为学习委员。

班委会分工名单公布后发现,甲、乙、丙三人都恰好猜对了一半,问:王小红、李强、丁金生各任何职。(书本P45)

2.代码实现

代码如下:

#  班长:b 生活委员:s   王小红:w 李强:li 丁金生:d
ls = ['b', 's', 'x']
for w in ls:
   for li in ls:
      for d in ls:
         W1 = (w == 'b')  # 王小红为班长
         L1 = (li == 's')  # 李强为生活委员
         D1 = (d == 'b')  # 丁金生为班长
         W2 = (w == 's')  # 王小红为生活委员
         L2 = (li == 'b')  # 李强为班长
         W3 = (w == 'x')  # 王小红为学习委员
         A1 = W1 and not L1
         A2 = not W1 and L1  # 甲
         B1 = D1 and not W2
         B2 = not D1 and W2  # 乙
         C1 = L2 and not W3
         C2 = not L2 and W3  # 丙
         if ((A1 and B1 and C1) or (A1 and B1 and C2) or (A1 and B2 and C1) or (A1 and B2 and C2) or \
            (A2 and B1 and C1) or (A2 and B1 and C2) or (A2 and B2 and C1) or (A1 and B2 and C2)) == 1 \
                 and W1+D1+L2 == 1 and L1+L2 == 1:  # 排除互斥项
            if W1 == 1:
               print('王小红为班长.')
            if L1 == 1:
               print('李强为生活委员.')
            if D1 == 1:
               print('丁金生为班长.')
            if W2 == 1:
               print('王小红为生活委员.')
            if L2 == 1:
               print('李强为班长.')
            if W3 == 1:
               print('王小红为学习委员.')

3.运行结果


三、谁出国学习

1.题目

某公司要从赵、钱、孙、李、周五名新毕业的大学生中选派一些人出国学习。选派中必须满足以下条件:

1)若赵去,则钱也去。
2)李、周两人中必有一人去。
3)钱、孙两人中去且仅去一人。
4)孙、李两人同去或同不去。
5)若周去,则赵、钱也同去。

该公司如何选派他们出国。(书本P45)

2.代码实现

# p:赵去 q:钱去 r:孙去 s:李去 t:周去
ls = [0, 1]
for p in ls:
	for q in ls:
		for r in ls:
			for s in ls:
				for t in ls:
					A = not p or q
					B = s or t
					C = (not q and r) or (q and not r)
					D = (r and s) or (not r and not s)
					E = (p and q) or not t
					if (A and B and C and D and E) == 1:
						if p == 1:
							print('赵去', end=' ')
						if q == 1:
							print('钱去', end=' ')
						if r == 1:
							print('孙去', end=' ')
						if s == 1:
							print('李去', end=' ')
						if t == 1:
							print('周去')
						print()

3.运行结果

 即要么孙李去,要么赵钱周去。


总结

根据提示将关键语句进行分类讨论。

注意其他特殊情况出现并将其排除。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐