曲则全,枉则直,洼则盈,敝则新,少则得,多则惑。 是以圣人抱一为天下式。不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长。

Python之青蛙对置

上一篇 / 下一篇  2010-01-31 17:08:22 / 个人分类:脚本语言

周末闲来无事,想起以前的一个小flash,正好可以练练python。

Flash:青蛙对置

想法:
想用Python算出怎么达到要求结果,并将每个步骤都打印出来。

思路:
一开始没有做过这种东西,想的是用随机,碰巧随机到了一次。。。但是后面都不灵光了。
然后就想,这个和树很像,将各个路径遍历出来,如果符合,就OK了,于是用的迭代。
用一个循环,代码中的“startgame”遍历7个位置的移动,当有移动时,再次调用startgame,直到符合条件为止,和树很像。

01  #! coding=gbk
02  result=[]
03  class froglist():
04      def __init__(self,froglist=[]):
05          self.froglist=froglist
06          self.iswin=False
07          self.findout=False
08          
09      def canmove(self,list,frognum):
10          rule={'green':[1,2],'red':[-1,-2]}
11          if list[frognum] in rule.keys():
12              moveto=[frognum+i for i in rule[list[frognum]]]
13              for i in moveto:
14                  if i>=0 and i<=6 and list[i]==None:
15                      return i+1                #当i为0时,返回是False
16                  
17          return False
18      
19      def movefrog(self,list,frognum):
20          temp=self.canmove(list,frognum)
21          if temp:
22              list[temp-1]=list[frognum]
23              list[frognum]=None
24              
25      def startgame(self,list):
26          for i in range(7): 
27              self.findout=False
28              if self.iswin==True:
29                  self.findout=True
30                  break 
31              startgamelist=[]
32              startgamelist[:]=list  
33              if self.canmove(startgamelist,i):
34                  self.movefrog(startgamelist,i)
35                  if startgamelist==['red','red','red',None,'green','green','green']:
36                      self.iswin=True
37                      print 'the result is ',startgamelist
38                  self.run(startgamelist)
39                  
40      def run(self,list):      
41          mylist=[]
42          mylist[:]=list
43          self.startgame(mylist)
44          if self.findout==True:
45              result.append(mylist)
46  
47  def main():
48      mylist=['green','green','green',None,'red','red','red']
49      c=froglist(mylist)
50      c.run(mylist)
51      for i in result:
52          print i
53  
54  if __name__=='__main__':
55      main()

总结:
1.数组的append,是传引用的。如:
basearr=[]
testarr=[1,2,3]
basearr.append(testarr)
testarr[2]=6
basearr
得到的是,[[1,2,6]]
所以后来我用的切片,怕出问题
2.Python,对于整形的0,也判定是False,如
a=0
type(a)
a==False
显示的是True,Python把0也认为是False
3.一段有意思的东西,在自己调东西的时候,无意中发现,数组可以自己append自己
arr=[1,2,3]
arr.append(arr)
id(arr[3])
id(arr)
两个id是一样的。

最后,代码一共不到60行,费了好久。。。。还是嫩了些。


TAG:

 

评分:0

我来说两句

日历

« 2024-03-27  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 46188
  • 日志数: 33
  • 文件数: 1
  • 建立时间: 2009-07-10
  • 更新时间: 2010-12-07

RSS订阅

Open Toolbar