鱼C论坛

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

一个逻辑题,求助

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

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

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

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

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

输出格式
* 是小偷
不知道python怎么写出这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 17:54:01 | 显示全部楼层
枚举法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:55:03 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-14 17:58 编辑
data = {
        '甲':{'甲':False}
        '乙':{'甲':True}
        '丙':{'丙':False}
        '丁':{'乙':True}
}
num = 1
用这个推断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

具体的代码是啥样的啊,因为刚开始学,什么都不懂,麻烦您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

for循环遍历
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:03:27 | 显示全部楼层
def thief_is():
    for thief in ('甲', '乙', '丙', '丁'):
        sum = ('甲' != thief) + (thief == '甲') + \
            (thief != '丙') + (thief == '乙')
        if sum == 3:
            print("%s是小偷"%thief)
thief_is()
我这样写的 但是不对 提交不能通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:08:19 | 显示全部楼层
穷小疯 发表于 2020-6-14 18:03
我这样写的 但是不对 提交不能通过
def thief_is():
    for thief in ('甲', '乙', '丙', '丁'):
        s = ('甲' != thief) + (thief == '甲') + \
            (thief != '丙') + (thief == '乙')
        if s == 3:
            print(thief,"是小偷")
thief_is()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还是不能通过,可能汉字出问题了 我再看看
75X}75(555PGRFDFKH[9U`7.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

看看参考答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmmm,我再看看哪个条件错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是答案错了,别管它
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

太自信了哈哈...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

.......我这又不是
对了,叫他把参考答案发下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 18:26:03 | 显示全部楼层
xiaosi4081 发表于 2020-6-14 18:20
是答案错了,别管它
for p in ['甲', '乙', '丙', '丁']:
      if (p!='甲') + (p=='甲') + (p!='丙') + (p=='乙') ==1 :
           print(p, '是小偷')
改了一下 这个的结果是对的
想知道小甲鱼最近在做啥?请访问 -> 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, '是小偷')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 18:40:47 | 显示全部楼层
又臭又长的代码:
class Testimony:
    def __init__(self,sayer,subject,pred,obj):
        self.sayer = sayer
        self.subject = subject
        self.predicate = pred
        self.obj = obj
        self.value = False
    def result(self,answer):
        if self.subject == answer.subject and self.predicate == answer.predicate:
            self.value = True
        elif self.subject != answer.subject and self.predicate != answer.predicate:
            self.value = True
        else:
            self.value = False
            
t1=Testimony('甲','甲',False,'thief')
t2=Testimony('乙','甲',True,'thief')
t3=Testimony('丙','丙',False,'thief')
t4=Testimony('丙','乙',True,'thief')

for thief in ('甲', '乙', '丙', '丁'):
    answer = Testimony('answer',thief,True,'')
    tru = 0
    for t in (t1,t2,t3,t4):
        t.result(answer)
        if t.value:
            tru += 1
    if tru == 1:
        print ("answer is :",thief)
答案:
answer is : 丙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 17:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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