Day3目录
几个概念
表达式
- 表达式,是由数字、算符、数字分组符号(括号)、⾃由变量和约束变量等以能求得数值的有意义排列⽅法所得的组合
表达式特点 - 表达式⼀般仅仅⽤于计算⼀些结果,不会对程序产⽣实质性的影响如果在交互模式中输⼊⼀个表达式,解释器会⾃动将表达式的结果输出
- a + b即为表达式
语句
- ⼀个语法上⾃成体系的单位,它由⼀个词或句法上有关连的⼀组词构成语句的执⾏⼀般会对程序产⽣⼀定的影响,在交互模式中不⼀定会输出语句的执⾏结果
函数(function)
- 函数就是⼀种语句,函数专⻔⽤来完成特定的功能
- 函数⻓的形如:xxx()
- 函数的分类:
- 内置函数 : 或者内建函数,就是由语法规定存在的函数,这些函数,包含在编译器的运⾏时库中,程序员不必单独书写代码实现它,只需要调⽤既可。
- ⾃定义函数 : 由程序员⾃主的创建的函数 当我们需要完成某个功能时,就可以去调⽤内置函数,或者⾃定义函数
- 函数的2个要素
- 参数
- 返回值
程序(program)
- 程序就是由⼀条⼀条的语句和⼀条⼀条的表达式构成的。
标识符
- 关键字
- python⼀些具有特殊功能的标识符,这就是所谓的关键字关键字,是python
已经使⽤的了,所以不允许开发者⾃⼰定义和关键字相同的名字的标识符
- python⼀些具有特殊功能的标识符,这就是所谓的关键字关键字,是python
- 标识符概念
- 开发⼈员在程序中⾃定义的⼀些符号和名称。标识符是⾃⼰定义的,如变量名、函数名等
- 组成:由26个英⽂字⺟⼤⼩写,数字 0-9 符号 _$
- 标识符的规则:
- 1.标识符中可以包含字⺟、数字、_,但是不能使⽤数字开头 例如:name1 name_1 _name1 1name(不⾏)
- 2.Python中不能使⽤关键字和保留字来作为标识符
- 命名⽅式
- 驼峰命名法
- ⼩驼峰式命名法: 第⼀个单词以⼩写字⺟开始;第⼆个单词的⾸字⺟⼤写,例如:myName、aDog
- ⼤驼峰式命名法: 每⼀个单字的⾸字⺟都采⽤⼤写字⺟,例如:FirstName、LastName
- 下划线命名法
- 不过在程序员中还有⼀种命名法⽐较流⾏,就是⽤下划线“_”来连接所有的单词,⽐如 get_url buffer_size
本小节要点
- 保留字和关键字不能使用,
- 驼峰命名法
- 小驼峰:myName
- 大驼峰:MyName
- 下划线命名法
- my_nam
基本数据类型
- 数据类型指的就是变量的值的类型,也就是可以为变量赋哪些值
整形(int)、浮点型(float)和其他类型
- 整数 : 所有整数 例如 : a = 1 b = 100 c =999 都是int类型⼩数常量 : 所有⼩数 例如 a = 1.2 b=6.66 ⽤float类型表示
- 布尔值和空值
- 布尔: 只有2个值⼀个是True ⼀个是False
- None常量:只有⼀个数值就是None 也就是空值
- 空值 None
- 字符串 ‘abcd’
- 列表 [1,2,3,4,5]
- 元组 tup2 = (1, 2, 3, 4, 5 )
- 字典:字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式示例:dict = {‘a’: 1, ‘b’: 2, ‘b’: ‘3’}
- 集合:可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。特点:集合(set)是一个无序的不重复元素序列
拓展:元祖、列表、字典、集合区别
一、列表
- 1.任意对象的有序集合
列表是一组任意类型的值,按照一定顺序组合而成的 - 2.通过偏移读取
组成列表的值叫做元素(Elements)。每一个元素被标识一个索引,第一个索引是0,序列的功能都能实现 - 3.可变长度,异构以及任意嵌套
列表中的元素可以是任意类型,甚至是列表类型,也就是说列表可以嵌套 - 4.可变的序列
支持索引、切片、合并、删除等等操作,它们都是在原处进行修改列表 - 5.对象引用数组
列表可以当成普通的数组,每当用到引用时,Python总是会将这个引用指向一个对象,所以程序只需处理对象的操作。当把一个对象赋给一个数据结构元素或变量名时,Python总是会存储对象的引用,而不是对象的一个拷贝
二、元组
- 1.任意对象的有序集合
与列表相同 - 2.通过偏移存取
与列表相同 - 3.属于不可变序列类型
类似于字符串,但元组是不可变的,不支持在列表中任何原处修改操作,不支持任何方法调用 - 4.固定长度、异构、任意嵌套
固定长度即元组不可变,在不被拷贝的情况下长度固定,其他同列表 - 5.对象引用的数组
与列表相似,元祖是对象引用的数组
和list相比
- 1.比列表操作速度快
- 2.对数据“写保护“
- 3.可用于字符串格式化中
- 4.可作为字典的key
三、字典
- 1.通过键而不是偏移量来读取
字典就是一个关联数组,是一个通过关键字索引的对象的集合,使用键-值(key-value)进行存储,查找速度快 - 2.任意对象的无序集合
字典中的项没有特定顺序,以“键”为象征 - 3.可变长、异构、任意嵌套
同列表,嵌套可以包含列表和其他的字典等 - 4.属于可变映射类型
因为是无序,故不能进行序列操作,但可以在远处修改,通过键映射到值。字典是唯一内置的映射类型(键映射到值的对象) - 5.对象引用表
字典存储的是对象引用,不是拷贝,和列表一样。字典的key是不能变的,list不能作为key,字符串、元祖、整数等都可以
和list比较,dict有以下几个特点:
- 1.查找和插入的速度极快,不会随着key的增加而增加
- 2.需要占用大量的内存,内存浪费多
而list相反: - 1.查找和插入的时间随着元素的增加而增加
- 2.占用空间小,浪费内存很少
所以,dict是用空间来换取时间的一种方法
四、集合
- 1.是一组key的集合,但不存储value,并且key不能重复
创建一个set,需要提供一个list作为输入集合,s = set([1,2,3]),注意,传入的参数 [1, 2, 3] 是一个list,而显示的 set([1, 2, 3]) 只是告诉你这个set内部有1,2,3这3个元素,显示的[ ]不表示这是一个list - 2.重复元素在set中自动被过滤
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,还有一种集合是forzenset( ),是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法
和dict对比
- 1.set和dict的唯一区别仅在于没有存储对应的value
- 2.set的原理和dict一样,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”
变量
变量的概念
- 变量是计算机内存中的⼀块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字。
- 变量命名规则
- 变量名由字⺟、数字、下划线组成要符合标识符的命名规范
- 数字不能开头
- 不能使⽤关键字
- 注意 : 是两个对象相等和两个对象是同⼀个对象是两个概念
- 变量的运算
- 变量的运算就是正常的四则运算 ,需要注意的是在运算过程中含有浮点数,那么它返回的就是⼀个浮点数类型
字符串
字符串介绍
-
字符串是由数字、字⺟、下划线组成的⼀串字符
-
注意
- 单引号和双引号不能混合使⽤
- Python中⽤⼀对双引号或者⼀对单引号包裹的内容就是字符串
-
转义字符
-
转义字符是⼀种特殊的字符常量。转义字符以反斜线""开头,后跟⼀个或⼏个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符
-
转义字符总结
-
⻓字符串
- ⻓字符串 ⼜叫做⽂档字符串 我们使⽤三重引号来表示⼀个⻓字符串’’’ ‘’’,
var1 = 'Hello World!' # Hello Wlrld 就是字符串
- 三重引号可以换⾏,并且会保留字符串中的格式
格式化字符串
-
第⼀种格式化字符串 拼串
a = 'python' b = '2021' print('hello ' +a+' '+b) # 结果:hello python 2021
-
第⼆种格式化字符串 参数传递
a = 'python' b = '2021' print('hello',a,b) # 结果:hello python 2021
-
第三种格式化字符串 占位符
- %s 字符串占位
- %f 浮点数占位,(%.2f —>保留两位小数)
- %d 整数占位
a = 'python' b = '2021' print('hello %s %s'%(a,b)) # 结果:hello python 2021
-
第四种格式化字符串 f’{变量}’/ str.format
- 第1种:f’{变量}’
a = 'python' b = '2021' print(f'hello {a} {b}') # 结果:hello python 2021
- 第2种:str.format
a = 'python' b = '2021' print('hello {} {}'.format(a,b)) # 结果:hello python 2021
-
字符串的其他操作
- len() 字符串的⻓度
- max() 最⼤值
- min() 最⼩值
- split()分割字符串
- join()拼接字符串
-
去空格
- s.strip() 左右两边去空格
- s.lstrip() 去左边空格
- s.rstrip() 去右边空格
-
字符串⼤⼩写
- s.upper() 全部⼤写
- s.lower() 全部⼩写
- s.isupper() 判断是不是⼤写
- s.islower() 判断是不是⼩写
以下是作业:
- a,b = 6, 8 我想让a=8 b=6我该怎么办?用2种方式实现
- 完成字符串的逆序以及统计
• 设计一个程序,要求只能输入长度低于31的字符串,否则提示用户重新输入
• 打印出字符串长度
• 使用切片逆序打印出字符串 - 要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
• 用户名长度6-20,用户名必须以字母开头
• 密码长度至少6位,不能为纯数字,不能有空格
-
- 第1题
# 第一题: a,b = 6, 8 我想让a=8 b=6我该怎么办?用2种方式实现 a,b = 6,8 a,b = b,a #第一种 print("a = ", a,"b = ",b) # 执行结果:a = 8 b = 6 c = a a = b b = c #第二种 print("a = ", a,"b = ",b) # 执行结果:a = 8 b = 6
- 第1题
-
- 第2题:
# 第二题:完成字符串的逆序以及统计 # • 设计一个程序,要求只能输入长度低于31的字符串,否则提示用户重新输入 # • 打印出字符串长度 # • 使用切片逆序打印出字符串 i = input(str('请输入:')) if len(i) > 31: print("请输入长度低于31字符的文本,请重新输入") else: print('输入字符串的长度为:',len(i)) n = i[::-1] print('逆序字符串为',n) # 执行结果: # 请输入:abcd # 输入字符串的长度为: 4 # 逆序字符串为 dcba # 请输入:as3d2f1a32sd1f3as21dfas3d2f1a3sd21fasd3f1asd3f21asdf31asf # 请输入长度低于31字符的文本,请重新输入
- 第2题:
-
- 第3题:
while True: username = input('请输入用户名:') password = input('请输入密码:') if len(username) < 6 or len(username) >21: print('用户名错误:用户名长度6-20位') elif not username[0:1].isalpha(): print('用户名错误:用户名必须以字母开头') elif len(password) < 6: print('密码错误:密码长度至少6位') elif password.isdigit(): print('密码错误:不能为纯数字') elif " " in password: print('密码错误:不能有空格') else: print('用户名、密码格式校验成功') break 执行结果: # 请输入用户名:a123456 # 请输入密码:321456 # 密码错误:不能为纯数字 # 请输入用户名:a3211 # 请输入密码:a12321 # 用户名错误:用户名长度6-20位 # 请输入用户名:a123456a # 请输入密码:12321a # 用户名、密码格式校验成功
- 第3题: