生成器
#ecoding=utf-8
#生成器
nested = [[1,2],[3,4],[5]]
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
for num in flatten(nested):
print num
#递归生成器
def flatten(nested):
try:
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested
def repeater(value):
while True:
new = (yield value)
if new is not None: value = new
r = 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 False
def 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,) + result
print 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 random
prettyprint(random.choice(list(queens(8))))