八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
#* queen problem with recurison
BOARD_SIZE = 8
def under_attack(col, queens):
left = right = col
for r, c in reversed(queens):
#左右有冲突的位置的列号
left, right = left - 1, right + 1
if c in (left, col, right):
return True
return False
def solve(n):
if n == 0:
return [[]]
smaller_solutions = solve(n - 1)
return [solution+[(n,i+1)]
for i in range(BOARD_SIZE)
for solution in smaller_solutions
if not under_attack(i+1, solution)]
for answer in solve(BOARD_SIZE):
print(answer)
找出排序数组的索引
def deduplication(self, nums):#找出排序数组的索引
for i in range(len(nums)):
if nums[i]==self:
return i
i=0
for x in nums:
if self>x:
i+=1
return i
print(deduplication(5, [1,3,5,6]))

嵌套循环
i = 2
while(i < 100):
j = 2
while(j <= (i/j)):
if not(i%j): break
j = j + 1
if (j > i/j) : print(i, " 是素数")
i = i + 1
print("Good bye!")

break
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for letter in 'Python': # 第一个实例
if letter == 'h':
break
print ('当前字母 :', letter)
var = 10 # 第二个实例
while var > 0:
print ('当前变量值 :', var)
var = var -1
if var == 5: # 当变量 var 等于 5 时退出循环
break
print ("Good bye!")

continue
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for letter in 'Python': # 第一个实例
if letter == 'h':
continue
print ('当前字母 :', letter)
var = 10 # 第二个实例
while var > 0:
var = var -1
if var == 5:
continue
print ('当前变量值 :', var)
print ("Good bye!")

pass
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 输出 Python 的每个字母
for letter in 'Python':
if letter == 'h':
pass
print ('这是 pass 块')
print ('当前字母 :', letter)
print ("Good bye!")

def sample(n_samples):
pass
#该处的 pass 便是占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行
日期和时间
#获取当前时间戳
import time; # 引入time模块
ticks = time.time()
print ("当前时间戳为:", ticks)

#获取当前时间
localtime = time.localtime(time.time())
print ("本地时间为 :", localtime)

#获取格式化时间
localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

#格式化日期
import time
# 格式化成2016-03-20 11:45:39形式
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Sat Mar 28 22:24:24 2016形式
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print (time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))

#获取某月日历
import calendar
cal = calendar.month(2016, 1)
print ("以下输出2016年1月份的日历:")
print (cal)

函数
#调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print ("Name: ", name);
print ("Age ", age);
return;
#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );

#不定长参数
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return;
# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );

#匿名函数
sum = lambda arg1, arg2: arg1 + arg2;
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

#return语句
def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print ("函数内 : ", total)
return total;
# 调用sum函数
total = sum( 10, 20 );

#全局变量与局部变量
total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print ("函数内是局部变量 : ", total)
return total;
#调用sum函数
sum( 10, 20 );
print ("函数外是全局变量 : ", total)

#异常处理
try:
fh = open("testfile", "w")
try:
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "关闭文件"
fh.close()
except IOError:
print ("Error: 没有找到文件或读取文件失败")
文章介绍了八皇后问题及其解决方案,展示了使用Python的回溯算法来解决此问题的代码。同时,文中还涵盖了Python的基础语法,如循环、条件判断、函数定义、默认参数、匿名函数、异常处理等编程概念,并提供了相关示例。
3838

被折叠的 条评论
为什么被折叠?



