python期末复习

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

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值