周总结
摘要:这一周,学习到了很多小知识点,也做了一些课后作业,虽然能自我完成作业,但是还是有小瑕疵,当遇到有个知识点我没有掌握,我还没参透里面的作用和效果,我就会百度查找相似的题目就会再做一下,直到我用自己的理解解出答案为止。对于我来说,写博客真的是一件很复杂的事情,耗时太长,我需要用一个下午到晚上的时间才能写完,我觉得还是用自己的语言去描述,会不会更快一点?作业的难度,老师很仁慈并不会让我们需要用一天时间去完成这个作业,可能前期是这样,没准过段时间,写博客的效率提上去了,随之作业难度也加大。
一、基本数据类型:
1.整型(int)
本质:就是整数 int()
内置方法:没有内置函数,就只是用于计算。
数据类型转换: int(待转的数据)
1.int 可以将纯整数的字符串转换成整型,且输出的类型都是 int类型。
2.如果字符串里有字母,或者小数点,特殊符号,则都不能转,会报错。
3.整型会直接将布尔值 True/False 直接转换成 1/0
进制数转换:
1.进制数有4种。
二进制、八进制、十进制、十六进制
2.十进制转其他进制
bin(十进制数据) => 二进制,bin 为二进制标识
oct(十进制数据) => 八进制,oct 为八进制标识
hex(十进制数据) => 十六进制,hex 为十六进制标识
如果没有任何标识,则默认都是十进制。
3.其他进制转十进制
直接用int(其他进制数据) => 十进制数
或者 直接用int(其他进制数据,n) => 十进制数(n为2,8,16)人为指定进制数。
2.浮点型(float)
本质:小数 float()
内置方法:没有内置函数,就只是用于计算。
数据类型转换
1.整型转换成浮点型,只需要后面添加小数点和0
2.有字母不能转换成浮点型,不然报错。
3.只能识别一个小数点,但不能识别多个小数点。不然会报错。
4.布尔值转换成浮点型会有 True/ False 转换成 1.0/0.0
3.字符串/字符型(str)
1.本质:由数字、字母、下划线组成的一串字符。
有单引号/双引号/三引号构成。注意二三引号也可以用于注释,但左右没有赋值符号或者变量时就是注释,不然就是字符串。
2.数据类型转换
兼容所有数据类型的转换。
3.内置方法
3.1按索引取值
正向取: s1[n] (n为阿拉伯数字,1)
反向取: s1[m] (m为阿拉伯数字负数形式,-1为最右边的第一个数值)
索引取值只能取值,不能绑定为其他数据值。
3.2切片
取出多个字符,切片数据默认都是从左到右的。
正向切片(顾头不顾尾,前包含后不包含)
反向切片(为负数,则从最右边第一个数-1开始取)
3.3间隔/方向
s1[x,y,z] (x,y,z 均为阿拉伯数字,也可以为负数)
当z = 2 时是代表步长为2,就是每取一个字符就中间隔一字符再取,默认1可以不用写。
取出全部字符: s1[:]
3.4统计字符串中字符的个数 len
3.5移除字符串首尾两边的字符,中间字符不行。 strip
注意:字符串里面一个空格也算一个字符
字符调用内置方法,不是改变原来数据,二三产生新的数据值。
3.6按照指定的字符切割字符串,将指定的字符切除。 split
3.7字符串大小写转换 lower/upper
将字符串里的所有字母转换成小写或者大写。
3.8字符串的格式化输出 {} format
方式一:等价于占位符%s====这里用{}来代替占位符,然后xxx.format('要替换的字符','要替换的字符','要替换的字符'....)
方式二:索引取值,支持重复使用。
res2 = 'my name is {0} my age is {1} {0} {1} {1} {1}'
print(res2.format('xz', 18))
#my name is xz my age is 18 xz 18 18 18
方式三:按K取值(关键字取值),支持重复使用。
res3 = '{name} {name} {age} my name is {name} my age is {age}'
print(res3.format(name='xz', age=18))
#xz xz 18 my name is xz my age is 18
方式四:'f'
先定义变量,简写f后面用变量名表示。
name = 'xz'
age = 18
print(f'my name is {name} my age is {age} {name} {age}')
#my name is xz my age is 18 xz 18
3.9统计字符串中指定的字符出现的次数 count
3.10判断字符串的开头或者结尾是不是指定的字符。
判断开头:s1.startswith('xxx')
判断结尾:s2.endswith('xxx')
3.11字符串的替换 replace
res.replace('xz', 'wyb', 1),从左往右替换指定个数1
3.12字符串的拼接 join
注意:列表数据中必须是字符串类型,不然会报错。
3.13判断字符串中是否全为纯数字 isdigit
如果全为纯数字则返回值为 True
如果不是纯数字则返回为 False
3.14查找某个字符对应的索引值 index
index 查找索引,如果没有元素,报错
find 查找索引,如果没有,则会返回为-1,False
3.15正文
如果字符串是标题化的,则见(title())则返回为True,不然返回为False。
print(res.capitalize()) 内容第一个字母为大写
# My name is xz
4.列表(list)
1.本质:list[1,2,3]。能存储多个数据且方便获取整体或局部数据。用中括号包含多个数据,且数据间用逗号间隔,数据值可以为任意的数据类型。
2.索引取值,数字的起始位置从0开始数,生活是从1开始数。
3.遇到复杂结构的构造结构,我们要先学会先拆后找到具体数据的位置。
4.数据类型转换:
列表只能转换字典和字符串,不能转换整型和浮点型。
所以能够被for循环的数据类型都可以转换成列表。
取值:
4.1.索引取值:[0]为列表的第一个数。参数为正数,则正向从左往右开始取值。为负数,则从右往左数第一个数为-1。
4.2.切片操作:[:] 冒号左边为从左开始取值的位置,冒号右边是从左往右最后一个位置,且遵循左包含右不包含。负数代表从右往左取值。
4.3.间隔
[::m]两个冒号后面的参数代表每隔 m-1 一个数取一个值。
4.4.统计列表中数据值的个数。
len(),统计列表中有多少个数据值。
5.内置函数
5.1.count():用来统计指定的成员在列表中出现的个数。
5.2.index()返回该元素的索引值。
注意:返回该元素的索引值是该元素在列表中第一次出现的位置。我们也能查询成员在特定位置范围内出现的索引值,eg:index(menber,m,n),表示menber在第m-1到n-1的位置。
5.3.reverse():该列表元素前后颠倒。
5.4.sort():将元素从小到大排序,如果想从大到小则可以与reverse()搭配使用。eg:list.sort(reverse = True)
5.5.append():向列表中添加一个成员。
list.append(2)
list.append('8')
注意:1.一次只能添加一个成员,并且只能添加在列表末尾。2.可以添加字符串类型。
5.6.exend():方法向列表中添加成员,并且是参数,可以为列表扩展列表。
意思是exend后面是列表时,就会多加的列表里的成员到要添加的列表的后面
如果exend后面跟字符串,则就会一个个字符拆开后依次再加入到列表后面。
如果想让字符串完整的加入列表,则需要用列表的形式来添加。
5.7.insert():特定位置添加成员。
两个参数,insert(m,member),在索引为m(也就是第m+1的位置进行添加)。
注意:因为是两个参数,索引多加一个参数就会造成错误。
5.8.remove():从列表中删除指定成员。
注意:列表中有多个重复成员时,一次只能删第一个。
5.9.del:用索引进行删除, del list [m] 删除列表第m-1 的数据值。
5.10.pop{}:将指定位置的元素取出来,并删除,也就是说有返回值。删除的数据,返回出来就是已经删除后的列表。
>>> list1 = [123, 456, 789]
>>> list1
[123, 456, 789]
>>> b = list1.pop(1)
>>> b
456
>>> list1
[123, 789]
5.字典(dict)
1.本质:存储多个数据值,且方便获取,数据间用逗号个开,用大括号包含,数据值形式是K:V键值对。
K是对V具有描述性性质的信息。
V的真实的数据值信息,V可以为任意的数据类型。
为什么按K取值,因为字典是无序性的所以不支持索引取值。
如果K不存在时,字典中没有K这个数据,则会报错。
6.布尔值(bool)
本质:判断事物的可行性。
两种状态。 True/False
命名规律:以is开头
在实际项目中数据库存储数据的特征,用一个字段来表示数据是否删除。
没有内置函数。
7.元组(tuple)
7.1.本质:被称为不可改变的列表,用个小括号来包含多数据值,是一个元组是安全的有序容器。
eg:tuple1 = (1, 2, 3)
用索引取值。
list1[0] = 'w' # 打印出[w, 2, 3]
tuple[0] = 'w' # 打印会出错。
7.2.数据类型转换:可以将列表转换成元组,但是数据值不能修改。
7.3.内置函数:
7.3.1 len()计算元组元素个数。
7.3.2 max()返回元组中元素最大值。
7.3.3 min()返回元组中元素最小值。
7.3.4 tuple(列表),将列表转换成元组。
>>> l1 = ['xx',1,2,'ww']
>>> l1
['xx', 1, 2, 'ww']
>>> t1 = tuple(l1)
>>> t1
('xx', 1, 2, 'ww')
8.集合(set)
8.1.本质:集合用于去重和关系运算,重复元素在set自动会被过滤掉。
(去除重复的部分,判断两个集合间的关系)
用大括号包含多个数据值,符号和字典一样,但是内部结构不一样。类似dict,是一组key的集合,不存储value
8.2.定义空集合是不一样的。
不能直接用 set = {},这样返回的数据类型是字符串型,索引需要加个set才能表示是集合的空集合。eg:s = set()。
8.3数据类型转换:
8.3.1 列表(list)转换成集合(set)
ll = [1,2,3,4,5]
s1 = set(ll)
print(s1) #{1, 2, 3, 4, 5}
print(type(s1)) #
8.3.2 元组(tuple)转换成集合(set)
2 = (1,2,3,4,3,2)
s2 = set(t2)
print(s2) #{1, 2, 3, 4}
print(type(s2)) #
8.4内置函数:
8.4.1 set.add()元素的添加。
s4 = set([1,2,3,4,5])
s4.add(6) #{1, 2, 3, 4, 5, 6}
s4.add(3) #可以添加重复的,但是不会有效果
#s4.add([7,8,9]) #报错 不能以列表的形式添加。
s4.add((7,8,9)) #{1, 2, 3, 4, 5, 6, (7, 8, 9)}
#s4.add({1:"a"}) #报错 不能以字典的形式添加。
print(s4)
8.4.2 set.update(列表,元组,字符串)
任何数据类型都是以最小单位的形式插入。先拆后一个个放。
s5 = set([1,2,3,4,5])
s5.update([6,7,8]) #{1, 2, 3, 4, 5, 6, 7, 8}
s5 = set([1,2,3,4,5])
s5.update((9,10)) #{1, 2, 3, 4, 5, 9, 10}
s5 = set([1,2,3,4,5])
s5.update("luck") #{1, 2, 3, 4, 5, 'c', 'k', 'u', 'l'}
s5 = set([1,2,3,4,5])
s5.update("never","luck") #{'u', 1, 2, 3, 4, 5, 'k', 'l', 'n', 'r', 'v', 'c', 'e'}
8.4.3 set.remove()删除指定元素。
s6 = set([1,2,3,4,5])
s6.remove(3)
print(s6) #{1, 2, 4, 5}
8.4.4 遍历
s7 = set("hello")
for i in s7:
print(i)
'''
输出:
h
o
e
l
'''
8.4.5 set 没有索引。
s7 = set("money")
for index, data in enumerate(s7):
print(index, data)
'''
0 y
1 n
2 o
3 e
4 m
'''
#set没有索引
#print((s7[3]))#会报错
会出现:TypeError: 'set' object is not subscriptable
8.4.6 交集 &
s8 = set([1,2,3])
s9 = set([2,3,4])
a1 = s8 & s9 #交集
print(a1) #{2, 3}
print(type(a1)) #
8.4.7 并集 |
s8 = set([1,2,3])
s9 = set([2,3,4])
a2 = s8 | s9 #并集
print(a2) #{1, 2, 3, 4}
print(type(a2)) #
二、与用户交互
1.输入:外界向计算机传递信息。
name = input( "输入信息:")
注意:input获取用户的所有数据类型都会转化成字符串(str)类型。
所以我们要进行强制类型转换,eg:
num = input('输入数字:')
num = int(num)
我们也能颖内置函数来判断字符串类型是否转化成数字,num.isdigit(),返回类型是 True/False。
2.输出:计算机向外界传递信息。
print('xxx')
print("xxx")
print('''xxxx''')
都输出,但是三引号作用是多行输出。
可以一次性打印多行数据值。
指定参数 end='\r\n' 表示换行符。
3.输入和输出在python2和python3的区别:
1.输入:
python3中input('xxx'),无论什么数据类型都会转换成字符串类型。
python2中input('xxx'),不改变任何数据类型。
但是pythoon2可以加上一个raw_input('xxx')这样输出就相当于Python3的input。
2.输出:
print()在python3中只有一种输出,但是在python2中有两种输出形式,一种python 另一种python(),一种加括号一种不加括号。但是功能都是一样的。
4.内置函数range在python2和python3中的区别:
python3中的range得出结果是一个迭代器而不是一个列表。如果想要转化为列表对象则需要再使用list方法进行转化。
>>> range(3)
range(0, 3)
range(0, 3)
>>> list1 = list(l)
>>> list1
[0, 1, 2]
python2中range得到是一个具体的列表,列表对象所拥有的方法,range方法生成的结果对象都可以直接使用。
>>> range(3)
[0, 1, 2]
如果想让python2得到相当于python3的迭代器,则需要加一个xrange();
>>> xrange(3)
xrange(3)
>>> list1 = xrange(1,3)
>>> list1
xrange(1, 3)
>>>
三、格式化输出
1.就是准备一个文本,然后将文本里的一些内容替换。
2.1.%s:支持所有数据类型的替换。
info1 = "你好,%s,今天是你%s生日"
print(info1 % ('xx',18))
print("你好,%s,今天是你%s生日"%('xx',18))
2.2.%d:只支持数字占位。
使用方法和%s一样,但是%d受限制,只支持数字占位。
产生固定位数的数据。
print('%05d',23) # 00023
固定规定为5位数,不够需在前面补0
四、运算符
1.算数运算符
加 +
减 -
乘 *
除 /
整除 //
取模 %
幂指数 **
2.算数运算符运算简写
算数运算的简写:
x = x + 10 可写成 x + = 10
x = x - 10 可写成 x - = 10
x = x * 10 可写成 x * = 10
x = x / 10 可写成 x / = 10
2.比较运算符
== 等于
!=不等于
3.逻辑运算符
1.and 与
链接多个条件必须都成立结果才能成立。
2.or 或
连接多个条件有一个成立结果就成立。
3.not 非
条件取反。
三者混合使用,需要加个括号来表示优先级,不然会出错。
注意:实质上还是有优先级区分的
() > not > and > or
4.字符串中数字比较大小是按照各个字符比较,就是位置从左往右一一比较。前面的数较大,则返回结果就是前面较大字符的字符串大于后者。
5.
5.1and的链接多个条件时都是成立,但是里面有一个具体的值,则结果为具体值。
5.2.and链接条件的结果最终取决于后面的,最后的值是明确的数据值,则直接返回该数据值。
5.3.and链接多个条件要一个个往后看,是否有不符合条件的,没有则返回为True,有具体数据值,则返回为该具体数据值。
6.
6.1.or 链接多个条件只要其中一个成立则结果成立。
6.2.or 链接多个条件的判断是取决于前面的条件是否成立,前面是表达式且成立,则返回结果为True,无论后面是数据值还是True都不影响。
6.3.or 链接多个条件要是从前往后看,是否有条件成立的,没有则返回为False,有具体数据值,则返回为该具体数据值
4.成员运算符
4.1.in 表示在...之内
如果在指定的序列中找到值返回 True,否则返回 False。
4.2.not 表示不在...之内
如果在指定的序列中没有找到值返回 True,否则返回 False。
4.3.列表在做成员运算的时候最小单位是整个数据值,不能拆分合并。
4.4.字符串在做成员运算的时候最小单位是单个字符,可以增加字符个数。
4.5.字典在做成员运算的时候只有K会参与运算,V不能暴露在外界。
5.身份运算符
5.1.is 判断数据值内存地址是否一样
5.2.== 判断数据值是否一致
5.3.id() 该数据值会返回一串数字,相当于内存地址。
5.4.注意:数据值相等,但是内存地址可能不一样。因为cpu每次向内存申请位置都是随机的。
内存地址一样,数据值就相等,对于单次程序是这样。
5.5.python具有内存优化的功能。
python对于数量小且经常使用的数据就会做内存优化会建一个“小整数池”。还有一些IDE软件也能做更多优化处理。比如直接用解释器运行上述,则每次CPU访问内存地都不一样。
赋值符
1.链式赋值
三个或多个变量绑定相同的数据值。
x = 10
x = y = z
2.交叉赋值
如果想让x绑定y绑定的数据值,让y帮忙绑定x的数据值。
x = 1
y = 2
方式一:(用中间变量)
t = x
x = y
y = t
print(x,y)
操作说明:
1.首先数据值1绑定给x,数据值100绑定给y。
2.t为变量与变量x绑定,x赋值给t,t为10.
3.x与y绑定,x与原来的数据值1解绑,x为2。
4.y与t绑定,y与原来的数据值2解绑,y为1。
总的来说只是利用中间变量t,来达到x与y相互交换数据值。
方式二:(用交叉赋值)
x, y = y, x
print(x,y)
简化了代码
3.解压赋值
赋值符号左边的变量至少要两个以上才行。
必须保证左边变量名和右边数据值要个数一致。
特殊情况,就是多个数据值绑定有限的变量名时,我们用*。
>>> l1 = [1,2,3,4,5,6]
>>> a,b,*c,d = l1
>>> a
1
>>> b
2
>>> c
[3, 4, 5]
>>> d
6
解压赋值会会自动将多余是数据值成列表赋值给带*后面的变名。
python缩进的作用
1.表示从属关系
缩进代码能不能运行取决于上面有没有父代码。
2.缩进量无要求,但是为了美观可以缩进相同的缩进量。
3.并不是所有代码都可以拥有子代码,要明确父代码是哪些,是不是可以拥有子代码的权限。
if else elif 中,elif和else不能单独使用需要和if一起使用才行。
且 if else elif 都在同一层次。
4.同属于一个父代码的多行子代码应该保证相同的缩进量,
如果代码缩进了,应该往上找一个缩进量比其还小的缩进量的父代码,如果这父代码拥有子代码的权限,则不会报错。
5.相同缩进的代码没有主次之分,都是按照顺序依次执行。
五、流程控制
1.顺序结构
从上到下的执行,程序一般都是这种顺序执行的。
2.分支结构
根据条件的不同执行不同的代码
1.if
单if分支:
if 条件 :
(条件成立执行代码)
①条件可以是布尔值也可以是表达式。②条件是一个也可以用逻辑运算符链接的条件。
if 条件1 :
(条件1成立执行代码)
if 条件2 :
(条件2成立执行代码)
这是if的嵌套。
if...else 分支
if 条件:
(条件成立之后执行---子代码)
else:
(条件不成立执行----子代码)
3.if...elif...else分支
if 条件1:
(条件1成立执行---子代码)
elif 条件2:
(条件1成立执行---子代码)
elif 条件3:
(条件2成立执行---子代码)
elif:
(上述所有的条件都不成立执行的代码)
注意:f elif else 三者连用,永远只会走一个分支
elif 和 else都是不能单独使用 必须结合if。
3.循环结构
根据条件的判断决定是否一直执行操作。
1.while循环
while 条件:
( 条件成立后执行的子代码)
具体流程:
1.先判断while后面条件是否成立,如果成立则执行子代码
2.子代码运行后,再次回到while后面的条件判断,判断条件是否成立。
3.如果条件成立则有执行子代码,子代码运行完成后有返回到while条件判断。
4.如此反复执行,直到while后面条件判断不成立则结束循环。
* 计数器 count
上述循环,我们可以设置一个计数器来结束循环。设置一个循环的次数,当达到循环次数后就结束循环。
eg:
count = 1
while count < 11:
print('num:',count)
count += 1
'''
num: 1
num: 2
num: 3
num: 4
num: 5
num: 6
num: 7
num: 8
num: 9
num: 10
'''
我们也可以用关键字break和continue来强制结束循环。
** while...break
一个break只能结束在它所在的循环体代码。
while True:
print('1')
while True:
print('2')
break #①
break #②
注意:
无①无②,则结果就为一层“1”,剩下无限循环“2”。
有①无②,则结果就为一层“1”和一层“2”这样无限循环。
有①有②,则结果就只有一层“1”和一层“2”。
** while...continue
就是跳过本次循环,接着下一次循环。
while True:
print(1)
while True:
print(3)
continue #①
continue #②
1.如果没有位置①代码,则结果是 1 3 3 3 ...
循环一直在子子代码的小循环体内。
2.如果只有位置①的代码,则结果是 1 3 3 3 3...
3.如果都有位置①和位置②的代码,则结果是 1 3 3 3 3 ...
** while...else
count = 1
while count <5:
print("num", count)
if count == 3:
break
count += 1
else:
print("end")
1.else 是等 while 后面的条件正常结束后才执行。
2.如果碰上break后,强制结束执行,就不会执行else的子代码。
3.如果将 else: 去掉,将 print与 while对齐,也会打印出结束循环的效果。但是有没有break都打印。
2.for循环
for 变量名 in 可迭代对象:
(for 循环体代码)
可迭代对象有字符串,列表,字典,元组,集合。
2.1for i in(列表):
打印出列表最小单位为数据值的整体,不能拆分合并。
索引取值,将列表的数据值按顺序打印。
2.2for i in(字典):
因为按K取值,所以循环打印出的结果是K值。
2.3for i in(字符串):
按顺序打印出一个个单字符。
2.4for i in(元组):
与列表一样,利用索引,取出单个数据值。
2.5for i in(集合):
索引取值,取出整个数据值。
2.6for i in range():
如果要遍历数字序列,可以使用内置range()函数,它会生成数列。
相当于while里的计数器。
2.6.1for in range(m)
括号内只有一个数字,那么就是从0开始到m-1结束。
2.6.2for i in range(m,n)
括号内有两个数字,第一个是起始位置m(包含) 第二个是终止位置n(不包含)
2.6.3for i in range(m,n,z)
括号内有三个数字m,n,z。z是数据的间隔数(相当于等差数列)
2.7 for +break/continue/else
2.7.1:break表示结束所在的那一层 for循环。
2.7.2:continue表示结束所在的那一次for循环,直接开始下一次循环
2.7.3:else配合 for一起使用。
当 for循环结束的情况下,循环体结束之后运行 else子代码。
注意:当for 循环到列表没有元素可以循环时会自动结束循环的。
3.死循环与全局标志位
1.死循环
count = 10
while True:
count *= 10
这是一串死循环的代码,它能使cpu一直在高速运行,长时间这样使电脑发热。最好先避免死循环的发生。
while True:
name = input('name>>>:')
计算机需要获取用户的信息,即使在循环中,但是计算机还是有时间去等待,并非高速运行。
2.全局标志位(可以不用)
flag = True
while flag:
print(1)
while flag:
print(3)
flag = False
在面对 while 里面嵌套多个 while中,如果不想多个 break来结束各个循环体,我们可以采用全局标志来代替多个break的使用,可以改变循环体执行和死循环。这只是简化的代码。