逻辑题

用python写了一个解法。
凶手是谁
  小阳的妹妹是小蒂和小红;他的女友叫小丽。小丽的哥哥是小刚和小温。他们的职业分别是:
  小阳:医生
  小刚:医生
  小蒂:医生
  小温:律师
  小红:律师
  小丽:律师
  这6人中的一个杀了其余5人中的一个。
  (1)假如这个凶手和受害者有一定的亲缘关系,那么说明凶手是男性;
  (2)假如这个凶手和受害者没有一定的亲缘关系,那么说明凶手是个医生;
  (3)假如这个凶手和受害者的职业一样,那么说明受害者是男性;
  (4)假如这个凶手和受害者的职业不一样,那么说明受害者是女性;
  (5)假如这个凶手和受害者的性别一样,那么说明凶手是个律师;
  (6)假如这个凶手和受害者的性别不一样,那么说明受害者是个医生。
  根据上面的条件,请问凶手是谁?
  提示:根据以个陈述中的假设与结论,判定哪3个陈述组合在一起不会产生矛盾。
写了个代码来判断这个逻辑:

# -*- coding: utf-8 -*-

class person():
    def __init__(self,_name,_sex,_career):
        self.name_ = _name
        self.sex_ = _sex    # 1 male 2 female
        self.career_ = _career # 1 doctor 2 career
        self.relation_map_ = {}

    def create_relationship(self,_other):
        if self.have_relationship(_other):
            return
        self.relation_map_[_other.name_]=True
        _other.create_relationship(self)

    def have_relationship(self,_other):
        return self.relation_map_.has_key(_other.name_)

    def is_male(self):
        return self.sex_ == 1

    def is_female(self):
        return not self.is_male()

    def is_doctor(self):
        return self.career_ == 1

    def is_lawyer(self):
        return self.career_ == 2


def logic1(murder,victim):
    if murder.have_relationship(victim):
        return murder.is_male()
    else:
        return murder.is_doctor()

def logic2(murder,victim):
    if murder.career_ == victim.career_:
        return victim.is_male()
    else:
        return murder.is_lawyer()

def logic3(murder,victim):
    if murder.sex_ == victim.sex_:
        return murder.is_lawyer()
    else:
        return victim.is_doctor()

if __name__ == "__main__":
    d1 = person('小阳',1,1)
    d2 = person('小刚',1,1)
    d3 = person('小蒂',2,1)

    l1 = person('小温',1,2)
    l2 = person('小红',2,2)
    l3 = person('小丽',2,2)

    d1.create_relationship(d3)
    d1.create_relationship(l2)
    d1.create_relationship(l3)

    l3.create_relationship(d2)
    l3.create_relationship(l1)

    all_member = []
    all_member.append(d1)
    all_member.append(d2)
    all_member.append(d3)

    all_member.append(l1)
    all_member.append(l2)
    all_member.append(l3)

    loop = 0
    for i in range(0,6):
        for j in range(0,6):
            loop += 1
            if i == j:
                continue
            m = all_member[i]
            v = all_member[j]

            if not logic1(m,v):
                continue

            if not logic2(m,v):
                continue

            if not logic3(m,v):
                continue

            print('loop: %d'%loop)
            print("murder is: %s"%m.name_)
            print("victim is: %s"%v.name_)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值