20161101 Python 读书笔记之八皇后问题

来源:互联网 发布:freeswitch java 编辑:程序博客网 时间:2024/06/05 19:35

生成器

#ecoding=utf-8#生成器nested = [[1,2],[3,4],[5]]def flatten(nested):    for sublist in nested:        for element in sublist:            yield elementfor num in flatten(nested):    print num#递归生成器def flatten(nested):    try:        for sublist in nested:            for element in flatten(sublist):                yield element    except TypeError:        yield nesteddef repeater(value):    while True:        new = (yield value)        if new is not None: value = newr = repeater(42)print r.next()print r.send("Hello,World!")


八皇后问题

#八皇后问题#寻找冲突def conflict(state,nextX):    nextY = len(state)    for i in range(nextY):        if abs(state[i]-nextX) in (0,nextY-i):            return True    return Falsedef queens(num=8,state=()):    for pos in range(num):        if not conflict(state,pos):            if len(state) == num-1:                yield (pos,)            else:                for result in queens(num,state+(pos,)):                    yield (pos,) + resultprint list(queens(3))print list(queens(4))print list(queens(8))#打包def prettyprint(solution):    def line(pos,length=len(solution)):        return '. '*(pos) + 'X '+'. '*(length-pos-1)    for pos in solution:        print line(pos)import randomprettyprint(random.choice(list(queens(8))))


0 0
原创粉丝点击