python语言的特点
(1)Python, 是一种面向对象的解释型计算机程序设计语言。
(2)Python的语法十分简洁,大大地提高了开发效率,更容易维护。
(3)Python是一门开源的跨平台语言,拥有丰富的第三方库。
标识符命名规则
(1)只能包含字母、数字 和 下划线。变量名可以以字母或者下划线开头。但是不能以数字开头。
(2)不能包含空格,但可以使用下划线来分隔其中的单词
(3)不能使用Python中的关键字作为变量名
(4)建议使用驼峰命名法,驼峰式命名分为大驼峰(UserName)。和小驼峰(userName)
内置函数
type()返回类型,min()最小值,max()最大值,len()返回长度
else各种用法以及表达含义
(1)if-else 条件表达式,不满足if条件时执行else语句
(2)while-else while循环语句,当while循环完成后执行else语句
(3)for-else for循环语句,当for循环完成后执行else语句
(4)try-except-else try语句,当try语句没有发生异常时执行else语句
Python中列表、元祖、字典、集合的定义
(1)列表是有序序列,用[]表示,列表元素可变数据类型
(2)元祖是有序序列,用()表示,元祖不可变数据类
(3)集合的元素是无序的、互异的,用{}表示,集合是可变数据类型
(4)字典是的元素是键值对:’key:value’,是无序的,用{}表示,字典是可变数据类型
可变数据与不可变数据的基本数据类型
不可变数据有字符串 、元祖 、数字
可变数据有列表 、集合 、字典
定义函数时,判断*args和**kargs参数类型, 分别写出它们数据类型
(1)*args是非关键字可变长度参数,**kargs是关键字可变长度参数
(2)args数据类型是元祖, kargs数据类型是字典
1.请编写一个程序,求出2-1000之内的所有素数,并将它们存入一个列表,并打印出总的个数
result = []
for i in range(2,1000):
for j in range(2,int(i**0.5)+1):
if i%j == 0:
break
else:
result.append(i)
print(len(result))
运行结果:168
2.汉诺塔问题:相传印度有座大寺庙,它曾被认为是宇宙的中心。神庙中放置了一块上面插有三根长木钉的木板,
在其中的一根木钉上,由上至下放了64片直径由小至大的圆环形金属片。古印度教的天神指示他的僧侣们将64片金属片全部移至另一根木钉上。移动规则只有两个:
1.在每次的移动中,只能移动一片金属片;
2.过程中任意时刻必须保证金属片小的在上,大的在下;
直到有那么一天,僧侣们能将64片金属片按规则从指定的木钉上全部移至另一根木钉上,那么,世界末日即随之来到,世间的一切终将被毁灭,万物都将至极乐世界。
使用递归的方法完成:
times = 1#计数
n=3#盘子总数
towers = {'A':list(range(n,0,-1)),'B':[],'C':[]}
def hannoi(num,src,dst,temp=None):
'''
:param num: 初始柱子盘子数
:param src: 初始柱子
:param dst: 目标柱子
:param temp: 临时柱子
:return:
'''
if num<1:
return
global times
#递归调用函数自身,先把除最后一个盘子之外的所有盘子移动到临时柱子上
hannoi(num-1,src,temp,dst)
#初始柱子移动最后一个盘子到目标柱子
print('The {0} Times move :{1}==>{2} moveValue:{3}'.format(times,src,dst,towers[src][-1]))
towers[dst].append(towers[src].pop())
for tower in 'ABC':
print(tower,':',towers[tower])
times += 1
#把除最后一个盘子之外的其他盘子从临时柱子移动到目标柱子上
hannoi(num - 1, temp, dst, src)
#A表示最初放置盘子的柱子,C表示目标柱子,B表示临时柱子
hannoi(n,'A','C','B')
3.约瑟夫环问题: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列, 返回出列顺序的列表。
方法一:非递归
def yueSeFu(listAll, index, step):
listNew = []
index = (index + step) % len(listAll);
listNew.append(listAll[index])
size = len(listAll)
count = 0
while len(listNew) < size:
while count < step:
index = index % size
curNum = listAll[index]
if curNum not in listNew:
count += 1
index += 1
listNew.append(curNum)
count = 0
return listNew
print(yueSeFu([1,3,5,7,9,11],2,3))
方法二:递归函数
def Yuesefu(listAll, startIndex, m):
n = len(listAll)
print("list length:%d" % n)
if n == 1:
print("result")
# print(listAll)
return listAll
else:
while startIndex > n:
startIndex = startIndex % n
endIndex = startIndex + m - 1
while endIndex >= n:
endIndex = endIndex % n
listAll.pop(endIndex)
print(listAll)
startIndex = endIndex
nextList = Yuesefu(listAll[:], startIndex, m)
# print(nextList)
return nextList