Python学习

 

Python 语言,我以前学过,但是由于好久没用,所以忘得差不多了,最近又重新学习,语法已经通了,只剩下类库的应用了。总的感觉就是 Python 真的很简捷、灵活,而且具有很丰富和强大的类库。举例如下:
>>> a,b=3,5
>>> a,b=b,a
就这么简单就可以实现交换两个数。
 
>>> [x for x in range(21) if x%2==0]
这是实现选取 0 20 之间的偶数。
 
>>> if 5>a>1:
... print 'a 1-5 之间 '
这种判断法在 C/C++ 等中可是不可以的哦。
 
class First:
    def __init__(self,temp):
        self.temp=temp;
 
    def out(self):
        print self.temp
 
fir=First(5);
fir.out();
这是一个简单的类的实现。
 
 
八皇后问题 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 下面是用 Python 实现的求解八皇后的两种解法:
 
# 八皇后问题递归解法
class EQueen:
   
    num=0             # 保存解的个数
    data=range(0,8)   # 保存解
   
    def isPlace(self,t):   # 判断t是否可以放置
        for i in range(0,t):
            if EQueen.data[i]==EQueen.data[t]:
                return 0
            if abs(EQueen.data[i]-EQueen.data[t])==abs(i-t):
                return 0
        return 1
 
    def queen(self,t): # 对t进行操作
        if t==8:
            EQueen.num+=1
            print EQueen.data
        else:
            for i in range(0,8):
                EQueen.data[t]=i
                if self.isPlace(t):
                    self.queen(t+1)
 
# 八皇后问题非递归解法
class EQueeny:
   
    num=0
    data=range(0,8)
   
    def isPlace(self,t):
        for i in xrange(0,t):
            if EQueeny.data[i]==EQueeny.data[t]:
                return 0
            if abs(EQueeny.data[i]-EQueeny.data[t])==abs(i-t):
                return 0
        return 1
    def queen(self):
        i=0
        EQueeny.data[i]=-1
        while i>=0:
            EQueeny.data[i]+=1
            while EQueeny.data[i]<8 and not self.isPlace(i):
                EQueeny.data[i]+=1
            if EQueeny.data[i]<8:
                if i==7:
                    print EQueeny.data
                    EQueeny.num+=1
                else:
                    i+=1
                    EQueeny.data[i]=-1
            else:
                i-=1
 
# 非递归解法           
eqy=EQueeny()
eqy.queen()
print eqy.num
 
print '*****************'
 
# 递归解法
eq=EQueen()
eq.queen(0)
print eq.num
 
 
推荐网站:好巴鹿(http:// www.haobalu.com
letao
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值