python学习


第五天

递归(recursion):

什么是递归:
    函数自身调用自身

注意:递归必须存在终止条件,如果没有终止条件递归是一个死循环 ,下图的if语句就是终止条件

在java等编程语言,如果递归没有终止条件,或者递归的层数太深,则可能出现Stack Overflow Error错误,该错误表示栈溢出错误(栈的内存空间不够了)

但是python、JavaScript等编程中,一般都会规定递归的层数,默认都是1000层也可以修改默认的层数:
    import sys
    sys.getrecursionlimit()        # 获取默认的递归层数
    sys.setrecursionlimit(num)    # 重新设置递归的最深层数

递归的实例

斐波那契数列(从第三项开始,此项等于前两项之和)

注:递归的深度最好不要超过30,本人的电脑递归到30就是极限了,深度为40 cmd卡死

容器: 

    变量这种存储单个数据的容器,也会提供存储多个数据容器
    线性容器
        数组(Array):连续内存
        链表(List):python list的容器,底层使用的就是双向链表结构
        栈(Stack):先进后出
        队列(queue):先进先出
    hash表(哈希表)

list:
    列表,是一种线性结构的容器,底层使用的双向链表结构设计

定义一个list容器:
    利用弱数据类型语言的特点:直接将[]这种列表数据赋给变量,则变量就是list类型
        ls = [1, 2, 3, 3, 445]
    也可以使用全局函数list
        ls = list()
        ls = list([1, 2, 3, 3, 445])

访问列表中的元素:
    因为list是有序的线性结构,因此每一个都是存在下标(索引)的,所以可以直接通过下标来访问
    列表对象[下标]    # 获取变量对应的元素
    注意:下标从0开始

得到list中的元素个数
    len(列表对象)        # 返回对象的元素个数

列表的遍历:
    for 临时变量 in 容器:
        每一次循环得到一个元素,被保存到临时变量中,也可以使用while,通过索引获取

list列表的常见方法:
    dir(模块/对象)            # dir全局函数可以打印输出模块或者对象的方法或者属性
    help(方法)            # 返回帮助文档
    ['append', 'clear', 'copy', 'count', 'extend', 'index',
    'insert', 'pop', 'remove', 'reverse', 'sort']

    |-- append(新元素)             # 在尾部添加新元素
    |-- insert(index, 新元素)     # 在index位置添加新元素
    |-- extend(列表)                 # 合并列表
    |-- clear()                           # 清空列表
    |-- pop()                            # 删除最后一个元素,并返回它
    |-- remove(元素)               # 删除对应的元素
    |-- index(元素)                 # 返回元素的下标索引
    |-- count(元素)                 # 统计某个元素在列表中的数量
    |-- reverse()                    # 翻转列表
    |-- sort()                          # 数据的类型必须相同
    |-- copy()                          # 复制list对象

Append 的使用


   Insert的使用

 Extend的使用

Index 的使用 

 Sort ——排序(默认升序排列)

降序排列 

set(集合):
    set是一种无序的集合,是一种hash表(哈希表)的实现,所以具备如下特点:
        1、无序
        2、不重复

定义一个set:
    s = {必须有元素}        # 注意,不要使用空的{},这样定义的是dict

常见方法:
    ['add', 'clear', 'copy', 'difference', 'difference_update',
    'discard', 'intersection', 'intersection_update', 'isdisjoint',
    'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference',
    'symmetric_difference_update', 'union', 'update']

    |-- add(新元素)            # 添加新的元素
    |-- clear()            # 清空集合
    |-- copy()            # 浅拷贝set
    |-- difference()        # 求两个集合的差集
    |-- union            # 求两个集合的并集
    |-- intersection        # 求两个集合的交集
    |-- remove()            # 移除元素,如果该元素不存在,则抛出错误
    |-- pop()            # 随机移除一个元素
    |-- discard()            # 移除元素,如果该元素不存在,则什么都不做

Union —— 并集

Intersection —— 交集

 


tuple(元组):
    不可变数据类型,类似于其他编程语言中的枚举类型
    代表一组固定不变的
    |-- index(元素)            # 返回元素的下标索引
    |-- count(元素)            # 统计某个元素在列表中的数量 

dict(字典):
    ['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] 

字典的遍历方式:

d = {"name":"神奇海螺","age"=18,"address":"比基尼海滩"}


d.get{"name"}
"神奇海螺"


d["age"]=17
d
{"name":"神奇海螺","age"=17,"address":"比基尼海滩"}


d.keys()
dict_keys(["name","age","address"])


d.values()
dict_values(["神奇海螺",17,"比基尼海滩"])


d.items()
dict_items([("name","神奇海螺"),("age",17"),(address","比基尼海滩")])


for k in d:
    print(k)
name
age
address



for k in d:
    print(k,d[k])
name 神奇海螺
..........


for key,value in d.items():
    print(key,value)
name 神奇海螺
..........


for key,value in d.items():
    print(res[0],res[1])
name 神奇海螺
age 17
..........

作业要求:
作业1:有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
        [10, 8, 5, 3, 27, 99]
作业2:如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

作业3:给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和

作业4:将list中的重复数据去重,至少使用两种方案

作业5:两个列表进行合并操作

作业6: 使用列表判断一个列表是否在另外一个列表中

作业7:列表的反转  列表的排序

作业8:如何将0-10随机存入列表中  

作业9:完成一个登录注册案例(要求使用容器保存数据)

作业结果

1

 

2

3

 

4

5

 

6

8

 

 

9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值