| 
 | 
 
 
发表于 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
 
  复制代码 
 
 
不足:如果有票数相同的,会只打印最后一个 |   
 
 
 
 |