for if 大法解决逻辑判断题(憨憨做法)

python解决逻辑判断题:
【问题描述】:
四个同学小明、小红、小刚、小强分别说:
小明说:我第1,小红第4,小刚第3
小红说:我第1,小明第4,小刚第2,小强第3
小刚说:小红第4,小明第3
小强说:小刚第1,我第4,小红第2,小明第3
对于四个人的成绩,每个人说的都只有一个是正确的,输出四个人的成绩排名。
【代码解决】:
注:解法相当憨批,暴力求解,for if 大法,但思路还是比较好理解的
【思路分析】:
将所有的排序方式列出,选取满足条件的一组,排序结果为:第一个人说的成绩‘a’正确,第二个人说的成绩‘b’正确……
最终确定成绩排序
【作者想说的话】:
君莫笑,莫喷……解法确实憨憨了,和以前的警察抓小偷不是一种题型,所以临时这样想的……

def grade_is():
    # a是小明、b是小红、c是小刚、d是小强
    xm={'a':1 , 'b':4 , 'c':3 , 'd':2}
    xh={'a':4 , 'b':1 , 'c':2 , 'd':3}
    xg1={'a':3 , 'b':4 , 'c':1 , 'd':2}
    xg2={'a':3 , 'b':4 , 'c':2 , 'd':1}
    xq={'a':3 , 'b':2 , 'c':1 , 'd':4}
    name_list = [[xm,xh,xg1,xq],[xm,xh,xg2,xq]]
    for name in name_list:
        for i in range(4):
            for j in range(4):
                if name[i] == name[j] or name[i].get('a')==name[j].get('b'):
                    continue
                for k in range(4):
                    if name[i] == name[k] or name[i].get('a')==name[k].get('c') \
                            or name[j] == name[k] or name[j].get('b')==name[k].get('c'):
                        continue
                    for l in range(4):
                        if name[i] == name[l] or name[i].get('a')==name[l].get('d') \
                            or name[j] == name[l] or name[j].get('b')==name[l].get('d')\
                            or name[k] == name[l] or name[k].get('c')==name[l].get('d'):
                            continue
                        if name[i].get('a') + name[j].get('b') + name[k].get('c') + name[l].get('d') == 10 \
                                and name[j].get('a')!=name[i].get('a') and name[k].get('a')!=name[i].get('a') and name[l].get('a')!=name[i].get('a') \
                                and name[i].get('b')!=name[j].get('b') and name[k].get('b')!=name[j].get('b') and name[l].get('b')!=name[j].get('b') \
                                and name[i].get('c')!=name[k].get('c') and name[j].get('c')!=name[k].get('c') and name[l].get('c')!=name[k].get('c') \
                                and name[i].get('d')!=name[l].get('d') and name[j].get('d')!=name[l].get('d') and name[k].get('d')!=name[l].get('d'):
                            print('小明的排名是{}\n小红的排名是{}\n小刚的排名是{}\n小强的排名是{}\n'.format(name[i].get('a'),name[j].get('b'),name[k].get('c'),name[l].get('d')))
grade_is()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UPC. 故里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值