python 练习 2

#!/usr/bin/python
# -*- coding: utf-8 -*-
from random import shuffle
class caigame:
    win=False
    flag=False
    life=12
    what=-1
    s1=''
    map1=[]
    thenum=0
    def start(self):
        t=range(1,10)
        shuffle(t)
        self.thenum=t[0]*1000+t[1]*100+t[2]*10+t[3]
        self.inmap()
        print self.thenum
        while self.life>0:
            self.GetResults()
        if self.win :
            print "你赢了"
        elif  self.flag:
            print "你退出了"
        else : print "你输了"
        return
    def GetResults(self):
        self.life-=1
        s1=raw_input('''输入你猜的那个数字
或者输入Q或者q退出
或者输入A或者a自动猜
''')
        if s1 in ['Q','q']:
            self.life=0
            self.flag=True
            return
        elif s1 in ['A','a']:
            s1= self.autodo()
        else:
            pass
        self.s1=s1
        w=self.getnum(s1)
        self.what=w
        print s1,":",w[0],"a",w[1],"b"
        if w[1]==4:
            self.life=0
            self.win=1
            return
        return
    def getnum(self,x,n1=-1):
        if n1==-1:n1=self.thenum
        n1=str(n1)
        a=len(filter(lambda m,n=n1:m in n,str(x)))
        b=len(filter(lambda m,n=n1,k=str(x):n.find(m)==k.find(m),str(x)))
        return [a,b]
    def inmap (self):
        r={}
        t=range(1,10)
        for i in t:
            for j in t:
                for m in t:
                    for n in t:
                        if i!=j!=m!=n!=i and j!=n and m!=i:
                            r[int(str(i)+str(j)+str(m)+str(n))]=1
        self.map1=r.keys()
        self.map1.sort()
        return
    def autodo(self):
        if self.what!=-1:
            self.map1=filter(lambda m,n=self.what,k=self.getnum ,ttt=self.s1:
                             n==k(ttt,m),self.map1)
        #if len(self.map1)<9 :print self.map1
        if self.map1[0]!=self.s1:
            return self.map1[0]
        else:
            return self.map1[-1]

def z86():
    #洗牌发牌
    t=[]
    def g(x):
        sh,yu=divmod(x,13)
        return [sh,yu]
    def g2(x,y):
        t=[]
        s1=["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
        for i in x:
            if i[0]==y:
                t+=[i[1]]
        t.sort()
        t=map(lambda m,n=s1:n[m],t)
        return t
    s2=[u"黑桃", u"红桃", u"方片", u"草花"]
    s3=[u"",u"",u"西",u""]
    t=range(52)
    shuffle(t)
    t=map(g,t)
    t=t[:13],t[13:26],t[26:39],t[39:]
    m=range(4);
    for i in m:
        print s3[i]
        for j in m:
            print s2[j],g2(t[i],j)
    print
def z93():
    ''' ** 汉诺塔游戏 ** 
     这个游戏是为了移动一个塔 
     你输入一个小数,这个数只能是2~7 
     这个数代表塔的层数\n 
     在一个木板上有三根杆子\n最左边的杆子
        自上而下,由小到大串着n层的塔\n,游戏的目的是
        将最左边的杆子上的塔移动到最右\n边的杆子上,
        条件是一次只能移动一个盘,\n并且不允许大盘放在小盘上。;
     如果输入2~7以外的任何字符那么n=4\n '''
    def g(x,y):
        s4=x==1 and ' '*7 or '' 
        s3="-"* (abs(x-y)==2 and 12 or 5)
        s3= x>y and s3+">" or "<"+s3
        print s4+str(x)+s3+str(y)
        return
    def move(n,z,m,y):
        if n>0:
            move(n-1,z,y,m)
            g(z,m)
            move(n-1,y,m,z)
        return
    t=raw_input("输入那个塔的层数")
    t=int(t)
    if not 8>t>1:t=4
    move(t,0,2,1)
    return
def z91():
    '''**人机猜数游戏 ** 
 这个游戏是为了 猜数. 这个数字是四位数 
 你输入一个四位数,各位数只能是1~9 
 计算机告诉你这个四位数有几个数正确,以及有几个位置正确\n 
 比如如果那个数是1234,你猜的是2354\n那么计算机会回答3a1b 
 表示你这个四位数有3个数正确,以及有1个连位置也正确\n '''
    e=caigame()
    e.start()
def z87():
    #黑白子交换
    def nex(x):
        if '012' in x:return x.replace('012','210')
        if '120' in x:return x.replace('120','021')
        if '10' in x and '2102' not in x:return x.replace('10','01')
        if '02' in x and '1021' not in x:return x.replace('02','20')
        return
    n=4
    t,r='1'*n,'2'*n
    x=t+'0'+r
    s=r+'0'+t
    while x!=s:
        print x
        x=nex(x)
    print s
if __name__ == '__main__':
    z91()
    #z93()

 

posted @ 2016-05-23 23:38  七月的尾巴_葵花  阅读(268)  评论(0编辑  收藏  举报