鱼C论坛

 找回密码
 立即注册
查看: 2074|回复: 18

一个逻辑题,求助

[复制链接]
发表于 2020-6-14 17:51:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
描述
一位警察,抓获4个盗窃嫌疑犯甲、乙、丙、丁,他们的供词如下:
甲说:不是我偷的。
乙说:是甲偷的。
丙说:不是我。
丁说:是乙偷的。
他们4人中只有一人说的是真话,你知道谁是小偷吗?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

输出格式
* 是小偷
不知道python怎么写出这个
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 17:54:01 | 显示全部楼层
枚举法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:55:03 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-14 17:58 编辑
  1. data = {
  2.         '甲':{'甲':False}
  3.         '乙':{'甲':True}
  4.         '丙':{'丙':False}
  5.         '丁':{'乙':True}
  6. }
  7. num = 1
复制代码

用这个推断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 17:56:57 | 显示全部楼层

具体的代码是啥样的啊,因为刚开始学,什么都不懂,麻烦您了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:59:10 | 显示全部楼层
穷小疯 发表于 2020-6-14 17:56
具体的代码是啥样的啊,因为刚开始学,什么都不懂,麻烦您了

for循环遍历
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:03:27 | 显示全部楼层
  1. def thief_is():
  2.     for thief in ('甲', '乙', '丙', '丁'):
  3.         sum = ('甲' != thief) + (thief == '甲') + \
  4.             (thief != '丙') + (thief == '乙')
  5.         if sum == 3:
  6.             print("%s是小偷"%thief)
  7. thief_is()
复制代码

我这样写的 但是不对 提交不能通过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:08:19 | 显示全部楼层
穷小疯 发表于 2020-6-14 18:03
我这样写的 但是不对 提交不能通过
  1. def thief_is():
  2.     for thief in ('甲', '乙', '丙', '丁'):
  3.         s = ('甲' != thief) + (thief == '甲') + \
  4.             (thief != '丙') + (thief == '乙')
  5.         if s == 3:
  6.             print(thief,"是小偷")
  7. thief_is()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:15:02 | 显示全部楼层

还是不能通过,可能汉字出问题了 我再看看
75X}75(555PGRFDFKH[9U`7.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:15:20 | 显示全部楼层

答案应该错了,因为:
甲说:不是我偷的。
乙说:是甲偷的。
丙说:不是我。
丁说:是乙偷的。
他们4人中只有一人说的是真话,你知道谁是小偷
如果是乙的话,那么甲和丙都说了真话,就有两个说真话的人了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:17:57 | 显示全部楼层
穷小疯 发表于 2020-6-14 18:15
还是不能通过,可能汉字出问题了 我再看看

看看参考答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:18:15 | 显示全部楼层
java2python 发表于 2020-6-14 18:15
答案应该错了,因为:
甲说:不是我偷的。
乙说:是甲偷的。

emmmm,我再看看哪个条件错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:20:01 | 显示全部楼层
穷小疯 发表于 2020-6-14 18:18
emmmm,我再看看哪个条件错了

是答案错了,别管它
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:22:34 | 显示全部楼层
(!A && !A && C && !B) || (A && A && C && !B) || (A && !A && !C && !B) || (A && !A && C && B)
=> (!A && C && !B) || (A && C && !B)
=> C
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:22:38 | 显示全部楼层
xiaosi4081 发表于 2020-6-14 18:20
是答案错了,别管它

太自信了哈哈...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:25:54 | 显示全部楼层

.......我这又不是
对了,叫他把参考答案发下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:26:03 | 显示全部楼层
xiaosi4081 发表于 2020-6-14 18:20
是答案错了,别管它
  1. for p in ['甲', '乙', '丙', '丁']:
  2.       if (p!='甲') + (p=='甲') + (p!='丙') + (p=='乙') ==1 :
  3.            print(p, '是小偷')
复制代码

改了一下 这个的结果是对的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:28:06 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-14 18:29 编辑
穷小疯 发表于 2020-6-14 18:26
改了一下 这个的结果是对的


元组和列表的区别咯,还有一个数字
测试一下是不是:
for p in ['甲', '乙', '丙', '丁']:
      print((p!='甲') + (p=='甲') + (p!='丙') + (p=='乙') )
      if (p!='甲') + (p=='甲') + (p!='丙') + (p=='乙') ==1 :
           print(p, '是小偷')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:33:55 | 显示全部楼层
xiaosi4081 发表于 2020-6-14 18:25
.......我这又不是
对了,叫他把参考答案发下

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:40:47 | 显示全部楼层
又臭又长的代码:
  1. class Testimony:
  2.     def __init__(self,sayer,subject,pred,obj):
  3.         self.sayer = sayer
  4.         self.subject = subject
  5.         self.predicate = pred
  6.         self.obj = obj
  7.         self.value = False
  8.     def result(self,answer):
  9.         if self.subject == answer.subject and self.predicate == answer.predicate:
  10.             self.value = True
  11.         elif self.subject != answer.subject and self.predicate != answer.predicate:
  12.             self.value = True
  13.         else:
  14.             self.value = False
  15.             
  16. t1=Testimony('甲','甲',False,'thief')
  17. t2=Testimony('乙','甲',True,'thief')
  18. t3=Testimony('丙','丙',False,'thief')
  19. t4=Testimony('丙','乙',True,'thief')

  20. for thief in ('甲', '乙', '丙', '丁'):
  21.     answer = Testimony('answer',thief,True,'')
  22.     tru = 0
  23.     for t in (t1,t2,t3,t4):
  24.         t.result(answer)
  25.         if t.value:
  26.             tru += 1
  27.     if tru == 1:
  28.         print ("answer is :",thief)
复制代码

答案:
answer is : 丙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 21:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表