整数和小数
基本数据类型
. 数据类型指的就是变量值的类型,也就是变量可以赋那些值。
整数和小数
. 整数:所有整数 例如:a=1, b=100, c=999 都是int类型的。
. 小数常量:所有小数 例如:a=1.5, b=7.77 都是用float类型的。
布尔值和空值
1. 布尔: 只有2个值一个是true, 一个是false
2. none常量: 只有一个数值就是none也就是空值
字符串
什么是字符串
- 字符串是由数字、字符、下划线组成的一串字符。
- 注意:
- 单引号或则双引号不能混合使用。
- python 中用一对双引号或则一对单引号包裹的内容就是字符串。
转义字符
- 转移字符是一种特殊的字符常量。转移字符以反斜线“ \ ” 开头,后面跟一个或则几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称 ’转义‘ 字符。
- 总结
- \t 表示制表符
- \n 表示换行符
- \ 表示反斜杠
- \‘表示’
- “表示”
长字符串
- 长字符串,又叫做文档字符串,我们使用三种引号来表示一个长字符串’’’ ‘’’
- 三重引号可以换行,并且会保留字符串中的格式。
格式化字符串
- 第一种格式化字符串 拼串
- 第二种格式化字符串 参数传递
- 第三种格式化字符串 占位符
- %s 字符串占位
- %f 浮点数占位
- %d 整数占位
- 第四种格式化字符串f’{变量}’
- str.format()
字符串的其他操作
- len() 字符串的长度
- max() 最大值
- min() 最小值
- split()分割字符串
- join()拼接字符串
- find()查找字符串
- replace()替换字符串
- partition()把字符串分割为三部分
- 去空格
– s.strip() 左右两边去空格
– s.lstrip() 去右边空格
– s.rstrip() 去右边空格 - 字符串大小写
– s.upper() 全部大写
– s.lower() 全部小写
– s.isupper() 判断是不是大写
– s.islower() 判断是不是小写
4. 列表
序列
基本概念
- 序列是python中的最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引。
- 数据结构指计算机中数据存储的方式。
序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
列表(list)
- 列表是python中的一个对象
- 列表的作用
– 列表中可以保存多个有序的数据
– 列表是用来存储对象的对象
列表的使用
- 列表的创建: 通过[ ] 来创建一个空列表
切片
- 切片是指从现有的列表中获得一个子列表。
- 通过切片来获取指定的元素。
- 语法: 列表[起始:结束:步长]
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素。
- 起始位置和结束位置的索引可以不写:
– 如果省略结束的位置,则会从当前的开始位置一直截取到最后。
– 如果省略开始位置,则会从第一个元素截取到结束位置的元素,但是不包括结束的元素。
– 如果开始位置和结束位置都省略,则会从第一个元素开始截取到最后一个元素。 - 步长表示获取每次元素的间隔,默认是1(可以省略不写)
- 步长不能为0,但可以是负数
通用操作
- +和*
– + 可以将两个列表拼接成一个列表
– * 可以将列表重复指定次数(注意2个列表不能够做乘法,要和整数做乘法运算) - in 和not in
- in 用来指定元素是否在列表当中
- not in 用来检查指定元素是否不在列表当中
- len() 获取列表中的元素的个数
- max() 获取列表中的最大值
- min() 获取列表中的最小值
- list.index(x[,start[,end]])
– 第一个参数 获取指定元素在列表中的位置。
– 第二个参数 表示查找的起始位置。
– 第三个参数 表示查找的结束位置。 - list.count(x)统计指定元素在列表中出现的个数。
修改列表
- 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列)
- 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致。
- 通过切片来删除元素
– del list[起始:结束]
– list = [ ]
列表的方法
- append() 像列表的最后添加一个元素
- insert(arg1,arg2)像列表位置插入一个元素。 参数1 :要插入的位置 参数2:要插入的元素
- extend(iterable)使用一个新的序列来扩展当前序列(它会将该序列中的元素添加到列表当中)参数需要传递一个序列
- pop() 根据索引删除并返回指定元素。
- remove() 删除指定元素(如果相同值的元素有多个,只会删除第一个)
- reverse()翻转列表
- sort(key=none,reverse=false)用来对列表中的元素进行排序reverse:true反序;false 正序
元组
元组简介
- 元组表现形式tuple。
- 元组是一个不可变的序列(一般当我们希望数据不可改变时,我们使用元组,其他情况下基本使用列表)。
- 使用()创建元素。
- 元组不是空元组至少要有一个逗号( ,) 当元组不是空元组时可以省略。
- 元组解包指将元组当中的每一个元素都赋值给一个变量。
字典
字典的基本介绍
- 字典属于一种新的书局结构称为映射(mapping)。
- 字典的作用和列表类似,都是用来存储对象的容器。
- 列表存储数据性能好,但是查询数据的性能差,字典正好与之相反。
- 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素。
- 这个名字我们称之为key 通过key 可以快速查询value 也可以称之为值。
- 字典我们也称之为键值对(key-value)结构。
- 每个字典都可以有多个键值对,而每个一个键值对我们称其为一项(item)。
- 创建一个有数据的字典 语法 {key:value}
- 字典的值可以是任意对象,字典的键可以是任意不可变的对象(int str bool tuple…)
- 字典的键是不能重复的,如果出现重复的后面的会替换前面的。
字典的使用
- dict() 函数来创建字典。
- get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,第二个参数可以指定一个默认值,当获取不到值的时候会返回一个默认值。
- update() 将其他字典的中的key-value添加到当前的字典当中。
- del 删除字典中的key-value 。
- popitem() 删除字典最后一个key-value 这个方法是有返回值的。删除之后他将会删除的key-value作为返回值 返回。
- pop(key[,default]) 根据kye删除自定中的value。第二个参数可以指定一个默认值,当获取不到的时候会返回默认值。
- copy() 方法对字典进行潜复制。
注意:潜复制只会复制字典本身,如果字典中还有个字典是不会被复制的。
遍历字典
我们主要通过三种方式对字典进行遍历。
-
keys() 该方法返回字典所有的的key
-
value() 该方法返回一个序列 序列中保存有字典的值
-
items() 该方法返回字典中所有的项它返回一个序列,序列中包含有双值子序列,双值分别是 字典中的key和value 。
bytes类型
bytes介绍
- 在python3 以后,字符串和bytes类型彻底分开了。字符串是以字符进行处理的,bytes类型是以字节为单位处理的。
- bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。
- python3 中,以bytes通常用于网络数据传输,二进制图片和文件的保存等等。
bytes创建
- 可以通过调用bytes() 生成bytes 实例,其值形式为 b‘xxxxx’ , 对于同一个字符串如果采用不同的bytes对象,就会形成不同的值。
1. >>> a = b 'hello'
2. >>> type(a)
3. <class 'bytes'>
4. >>> b = bytes('hello' , encoding ='utf8')
5. >>> type(b)
6. <class 'bytes'>
bytes类型常用转换
- 那在实际应用中,我们通常会将bytes类型与str类型做转换。
- 字节转换为字符串
1. >>> d = b'world'
2. >>> d.decode()
3. 'world'
4. >>> type(d)
5. <class 'bytes'>
- 字符串转为字节
1. >>> e = 'world'
2. >>> e.encode()
3. b'world'
4. >>> type(e)
5. <class 'str'>
常见问题总结
- 引号引起的错误
问题描述
解决方案
把中文的引号换成英文的引号。在编程一律使用英文的符号。
-
f “方法格式化字符串的书写”
-
代码的运行
- 代码的运行就是在程序中点击鼠标右键,然后就带就点击run就可以了,不需要点击上方的绿色运行符号。
- 字符串可以随机输出打印吗?
- 为什么打印结果会出错
- 这个是字符串构成的问题,只要是由单引号或者双引号,引起的数据问题,都是字符串,而%f只能传递浮点型,%d只能传递整数。
- 格式化浮点型数据的时候怎么让它精确小数位。
-
整形和浮点型数据不能够获取长度,也就不支持len函数。
-
s[0:0] = ‘元素’ 为什么不是直接插入到首位,而不是替换首位?
- 列表中切片的时候,s[a:b]取得元素是左闭右开型,也就是说,前面开始位置的索引所在元素可以取到,但是结束位置的索引所在的元素不能够取到,所以,我们查找s[0:0]的时候只能找到首位,不能拿到首位的元素,所以变为了直接插入这个新的元素。
- 为什么要在for循环为建立一个空列表,在for循环中修改的数据添加到空列表中才能够修改成功。
- for循环中, 我们只能进行一个遍历,通俗的将我们就是只能查看的权力,不能够去修改它,所以我们需要在for循环外尽力一个空列表,把我们做出来的修改保存到这个列表当中,到外面使用才是有效的。
- 深拷贝和浅拷贝的原理和区别
- 深拷贝和浅拷贝都是将所有拷贝的对象在内存中重新开辟出一片空间来存储拷贝出来的新对象。
- 但是浅拷贝只能拷贝出来对象的第一层数据,不能拷贝对象的更深层数据,举例如下
- 深拷贝则是可以将拷贝对象的所有数据全部数据全部拷贝出来,成为一个完全独立的对象
练习
- 现在有 a = [1,2,3,4,5,6] 用多种方式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
# 第一种方法
a = [1, 2, 3, 4, 5, 6]
print(a[::-1])
# 第二种方法
b = [1, 2, 3, 4, 5, 6]
b[0:7] = 6, 5, 4, 3, 2, 1
print(b)
# 第三种方法
c = [1, 2, 3, 4, 5, 6]
c.sort(reverse=True)
print(c)
# 第四种方法
d = [1, 2, 3, 4, 5, 6]
del d[0:7]
d.insert(0, 654321)
print(d)
- 有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
lst3 = set(lst1) & set(lst2)
print(lst3)
- 给用户9次机会,猜1-10 个数字随机来猜数字。如果随机的数字和用户输入的数字表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ]
i = 0
while i < 9:
number = int(input('请输入一个1-10的数字:'))
if number != list1 and 0 < number <= 10 and number in list1:
print('输入错误,你还有%d次机会' % (8-i))
i = i+1
list1.remove(number)
elif number not in list1:
print('你已经输入过了,你还可以输入%s' % list1)
else:
print('输入的数字不在范围内,请输入1-10的数字')
else:
print('正确数字%s' % list1)
- 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,要求每个办公室至少有一个老师
while True:
import random
office = [], [], []
teacher = ['老师1', '老师2', '老师3', '老师4', '老师5', '老师6', '老师7', '老师8']
for i in teacher:
a = random.randint(0, 2)
office[a].append(i)
b = 0
for i in office:
if len(i) == 0:
b += 1
if b == 0:
break
print('第一个办公室有:', office[0], '\n' '第二个办公室有:', office[1], '\n' '第三个办公室有:', office[2])