穷小疯 发表于 2020-6-14 17:51:45

一个逻辑题,求助

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

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

输出格式
* 是小偷
不知道python怎么写出这个

xiaosi4081 发表于 2020-6-14 17:54:01

枚举法

xiaosi4081 发表于 2020-6-14 17:55:03

本帖最后由 xiaosi4081 于 2020-6-14 17:58 编辑

data = {
        '甲':{'甲':False}
        '乙':{'甲':True}
        '丙':{'丙':False}
        '丁':{'乙':True}
}
num = 1
用这个推断

穷小疯 发表于 2020-6-14 17:56:57

xiaosi4081 发表于 2020-6-14 17:55


具体的代码是啥样的啊,因为刚开始学,什么都不懂,麻烦您了

xiaosi4081 发表于 2020-6-14 17:59:10

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

for循环遍历

穷小疯 发表于 2020-6-14 18:03:27

xiaosi4081 发表于 2020-6-14 17:59
for循环遍历

def thief_is():
    for thief in ('甲', '乙', '丙', '丁'):
      sum = ('甲' != thief) + (thief == '甲') + \
            (thief != '丙') + (thief == '乙')
      if sum == 3:
            print("%s是小偷"%thief)
thief_is()
我这样写的 但是不对 提交不能通过

xiaosi4081 发表于 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()

穷小疯 发表于 2020-6-14 18:15:02

xiaosi4081 发表于 2020-6-14 18:08


还是不能通过,可能汉字出问题了 我再看看

java2python 发表于 2020-6-14 18:15:20

xiaosi4081 发表于 2020-6-14 18:08


答案应该错了,因为:
甲说:不是我偷的。
乙说:是甲偷的。
丙说:不是我。
丁说:是乙偷的。
他们4人中只有一人说的是真话,你知道谁是小偷
如果是乙的话,那么甲和丙都说了真话,就有两个说真话的人了。

xiaosi4081 发表于 2020-6-14 18:17:57

穷小疯 发表于 2020-6-14 18:15
还是不能通过,可能汉字出问题了 我再看看

看看参考答案

穷小疯 发表于 2020-6-14 18:18:15

java2python 发表于 2020-6-14 18:15
答案应该错了,因为:
甲说:不是我偷的。
乙说:是甲偷的。


emmmm,我再看看哪个条件错了

xiaosi4081 发表于 2020-6-14 18:20:01

穷小疯 发表于 2020-6-14 18:18
emmmm,我再看看哪个条件错了

是答案错了,别管它

赚小钱 发表于 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

Twilight6 发表于 2020-6-14 18:22:38

xiaosi4081 发表于 2020-6-14 18:20
是答案错了,别管它

太自信了哈哈...{:10_245:}

xiaosi4081 发表于 2020-6-14 18:25:54

Twilight6 发表于 2020-6-14 18:22
太自信了哈哈...

.......我这又不是
对了,叫他把参考答案发下

穷小疯 发表于 2020-6-14 18:26:03

xiaosi4081 发表于 2020-6-14 18:20
是答案错了,别管它

for p in ['甲', '乙', '丙', '丁']:
      if (p!='甲') + (p=='甲') + (p!='丙') + (p=='乙') ==1 :
         print(p, '是小偷')
改了一下 这个的结果是对的

xiaosi4081 发表于 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, '是小偷')

Twilight6 发表于 2020-6-14 18:33:55

xiaosi4081 发表于 2020-6-14 18:25
.......我这又不是
对了,叫他把参考答案发下

{:10_297:}

java2python 发表于 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 : 丙
页: [1]
查看完整版本: 一个逻辑题,求助