[python-chinese] 谁养鱼的问题. TableOfContents
GreyRoar
纯属抛砖引玉. 在啄木鸟上贴我写的这个版本之前,我也给hoxide看过,希望他能够写出更好的程序。 这个是用遍历做的,25号写的第一个版本。27号做出了一些优化,重写了mulitarg()、pailie5(),调整了一下遍历时条件判断的位置和顺序。 代码的确写得很烂,不过功能的确实现了。关于代码书写与功能实现的关系,我在我的页里谈到了一下(GreyRoar)
Einstein.py
1 # -*- coding: cp936 -*-
2 data=[["黄房子","蓝房子","白房子","红房子","绿房子"],["挪威人","英国人","德国人","丹麦人","瑞典人"],["DUNHILL","PRINCE","混合烟", "PALL MALL","BLUE MASTER"],["咖啡","矿泉水","茶","牛奶","啤酒"],["鱼","猫","马", "鸟","狗"]]
3 def mulitarg(x,y):
4 return [[0 for col in range(x)] for row in range(y)]
5 def pailie5():
6 a=range(5)
7 def newlist(i,oldlist):
8 return [x for x in oldlist if x!=i]
9 return [[x,y,z,i,m] for x,y,z,i,m in [(x,y,z,i,m) for x in a for y in newlist(x,a) for z in newlist(y,newlist(x,a)) for i in newlist(z,newlist(y,newlist(x,a))) for m in newlist(i,newlist(z,newlist(y,newlist(x,a))))]]
10 answer=mulitarg(5,5)
11 g=pailie5()
12 for i in range(120):
13 if data[0][g[i][1]]=="蓝房子":
14 answer[0]=[data[0][g[i][0]],data[0][g[i][1]],data[0][g[i][2]],data[0][g[i][3]],data[0][g[i][4]]]
15 if answer[0].index("白房子")-answer[0].index("绿房子")==1:
16 for j in range(120):
17 if data[1][g[j][0]]=="挪威人":
18 answer[1]=[data[1][g[j][0]],data[1][g[j][1]],data[1][g[j][2]],data[1][g[j][3]],data[1][g[j][4]]]
19 if answer[0][answer[1].index("英国人")]=="红房子":
20 for k in range(120):
21 answer[2]=[data[2][g[k][0]],data[2][g[k][1]],data[2][g[k][2]],data[2][g[k][3]],data[2][g[k][4]]]
22 if answer[1][answer[2].index("PRINCE")]=="德国人":
23 if answer[0][answer[2].index("DUNHILL")]=="黄房子":
24 for l in range(120):
25 if data[3][g[l][2]]=="牛奶":
26 answer[3]=[data[3][g[l][0]],data[3][g[l][1]],data[3][g[l][2]],data[3][g[l][3]],data[3][g[l][4]]]
27 if answer[2][answer[3].index("啤酒")]=="BLUE MASTER":
28 if answer[1][answer[3].index("茶")]=="丹麦人":
29 if answer[0][answer[3].index("咖啡")]=="绿房子":
30 import math
31 if int(math.fabs(answer[3].index("矿泉水")-answer[2].index("混合烟")))==1:
32 for m in range(120):
33 answer[4]=[data[4][g[m][0]],data[4][g[m][1]],data[4][g[m][2]],data[4][g[m][3]],data[4][g[m][4]]]
34 if answer[2][answer[4].index("猫")]!="混合烟":
35 if int(math.fabs(answer[2].index("混合烟")-answer[4].index("猫")))==1:
36 if int(math.fabs(answer[4].index("马")-answer[2].index("DUNHILL")))==1:
37 if answer[1][answer[4].index("狗")]=="瑞典人":
38 if answer[2][answer[4].index("鸟")]=="PALL MALL":
39 for i in range(5):
40 print answer[i][answer[4].index("鱼")],
41 print
