|
发表于 2018-9-25 13:18:58
|
显示全部楼层
本楼为最佳答案
本帖最后由 pyhero 于 2018-9-25 13:22 编辑
- answers = dict()
- persons = ['A', 'B', 'C', 'D']
- # get answers
- for person in persons:
- print('Ask {}'.format(person))
- answer = dict()
- total = {'0': 0, '1': 0, '2': 0}
- for p in [x for x in persons if x != person]:
- value = input('Is {} the prisoners? 0: No, 1: Yes, 2 Unknown: '.format(p))
- while value not in ['0', '1', '2']:
- value = input('Bad input, chose from: 0: No, 1: Yes, 2 Unknown: ')
- total[value] += 1
- answer[p] = int(value)
- mapping = {'是凶手票数': total['1'], '不是凶手票数': total['0'], '不知道票数': total['2']}
- answers[person] = [mapping, answer]
- # judge prisoners
- for k, v in answers.items():
- print('{}: {}, 投票情况: {}'.format(k, v[0], v[1]))
- result = sorted(answers.items(), key=lambda x: x[1][0]['是凶手票数'])[-1][0]
- print('凶手是{}'.format(result))
复制代码
执行过程:
- Ask A
- Is B the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is C the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is D the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Ask B
- Is A the prisoners? 0: No, 1: Yes, 2 Unknown: 2
- Is C the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is D the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Ask C
- Is A the prisoners? 0: No, 1: Yes, 2 Unknown: 2
- Is B the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is D the prisoners? 0: No, 1: Yes, 2 Unknown: 2
- Ask D
- Is A the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is B the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- Is C the prisoners? 0: No, 1: Yes, 2 Unknown: 1
- A: {'是凶手票数': 3, '不是凶手票数': 0, '不知道票数': 0}, 投票情况: {'B': 1, 'C': 1, 'D': 1}
- B: {'是凶手票数': 2, '不是凶手票数': 0, '不知道票数': 1}, 投票情况: {'A': 2, 'C': 1, 'D': 1}
- C: {'是凶手票数': 1, '不是凶手票数': 0, '不知道票数': 2}, 投票情况: {'A': 2, 'B': 1, 'D': 2}
- D: {'是凶手票数': 3, '不是凶手票数': 0, '不知道票数': 0}, 投票情况: {'A': 1, 'B': 1, 'C': 1}
- 凶手是D
复制代码
不足:如果有票数相同的,会只打印最后一个 |
|