**问题一:**我们为什么来学习Python?
**问题二:**我们要如何学好Python?
**问题三:*关于我的学习笔记
我们为什么来学习Python?1.优雅简洁
Python先对于其他的编程语言,要更加 优雅 、简洁,入门更加容易,同时语法规则更加简单明了
2.胶水语言
Python是一门胶水语言,也是一门脚本语言,Python可以很方便的和其他编程语言进行交互,可以调用其他的语言写的程序, 也可以嵌入其他语言当中去
3.运用广泛
Python在Web后台、爬虫、数据分析、机器学习、人工智能、自动化测试、自动化运维、量化交易、金融分析等方面都有很好的应用。因此学会python可以选择从事的方向非常多,这些年在金融方向上的重要性也逐年提高
4.效率高
(1)Python的开发效率高,代码量更少。同样的项目,和java相比,python的代码量可能只有Java代码的四分之一
(2)可移植性好,python本身是开源的,所以能够很快的移植到许多平台上
我们要如何学好Python? 学习需要不断的积累与操练,一切只谈方法不谈实践的方法都是纸上谈兵!
最快掌握的Python的途径就是多实践,多思考,多记笔记
关于我的学习笔记 1.创一个博客,用博客记笔记
2.归纳总结,对学过的内容有个很好的归纳总结,能够快速帮自己建立起知识体系
3.方便复习,用博客记笔记,不易丢失
4.养号,坚持写作,长期积累起来,小号都会变大号
一.入门须知 1.python的诞生的背景 在Python之前已经诞生了非常多的编程语言,也有非常多的编程语言至今任然被广泛使用,或者是在某些特定领域发挥着重要作用,而Python的诞生充满喜剧性,同时又是时代的选择!
(1)早期编程语言的复杂性早期编程语言基本都是面向过程的,可以简单理解为每一步都需要程序员都写出来(2)Guido的苦恼
Guido十分苦恼于当时编程语言的复杂性和效率低下,明明逻辑清晰却要很久才行做完(3)1989年的圣诞节
Guido在过圣诞节时忍不住自己去写一个优雅的编程语言,到1991年Python正式发布1.0版本2.python的发展
(1)早期运用
1991年Python1.0版本正式发布,Python是用C语言写的,所以可以直接调用C库文件,还并没有广泛的流行起来
(2)开源推动
Python 2.x 社区支持,让Python快速的发展起来,2000年开始社区支持之后,Python得到了快速的发展,各种实用类型的模块快速的出现
(3)python 3.x
2008年,Python3.0正式发布,意味Python进入了一个新的时代,在Python 2.x版本中,还存在这个不少不完善的地方,因此社区推出了不是完全兼容2版本的3版本
(4)广泛流行
Python从进入社区开始,就不断在各个领域大放异彩,Python开始在:云计算、Web开发、科学计算和人工智能、系统操作和维护、金融、图形GUI等领域应用开来。二.基本概念 1.数学计算符
+加 -减 *乘 /除 //整除 %余数 **幂指数
2.变量: 变量是编程语言中最基本的概念,和字面意思一样,指的就是他们的值可变,和我们以前学习的方程类似,变量可以代入任何值,变量帮我们减少代码的复杂性,增强可读性。
(1)命名规范 变量一般使用: 英文字母、下划线 和 数字组成,
注意:第一个字母必须是英文字母或者下划线_
支持中文作为变量名,不规范。不建议,首选英文,abcd…
关键字不能做变量名
内置函数最好也不要做变量名
(2)见明知意程序中肯定会有很多变量名,所以变量的命名十分重要,最好做到见名知意
3.输入输出(input,print) (1)输出printprint('Hollow word')
print('圣美最帅')
(2)输入input
注意:输入函数接收到的任何值都是一个字符串。
print('最帅的人是:', input('请输入最帅的人的名字:'))
四个内置函数:
str() 字符串类型
int() 数字类型
float() 小数类型
bool() 布尔类型,True或False,存在即为True,不存在即为False
整型和浮点型之间的转换:int()、float()
a = float(1)
b = int(1.53) # 非四舍五入的值,直接忽略小数位
c = float(int(1.23)) # 结果为小数1.0
字符串和数值如何转换
约束:只有数字类型的字符串才可以转换成数值类型的值
字符串转数值
a = int('1') # 字符串1转成整型
print(type(a)) #查看变量a的类型
b = float('1') # 字符串1转成浮点型
c = float('1.123')
d = int('1.55') # 字符串小数类型的值不能转整型
数值转字符串,没有约束,可以随意转换
2.字符串
定义:由中英文,数字,各种通用符,空格并且由引号包裹起来的这么一长串的字符组成的文本数据。字符串可以为空,也可以由多个字符组成。
引号:单引号(英文),双引号,三引号(“”" “”") ,必须成双成对。
# 字符串的运算:加、乘
# 相加(字符串+字符串) 相乘(字符串*数字),字符串的拼接。
print('5'+'8'+'同城') # 字符串相加,将多段字符串拼接在一起,成为一段字符串。
print('圣美'*3) # 字符串相乘倍数输出得到n个相同的字符串拼接成的一段字符串。
print('圣美',end='') # end连接下一行
print('*'*20,'python','*'*20,sep='') # sep将逗号产生的空格取消
3.字符串的拼接
x,y = '我喜欢', 'python'
z = '''因为我最帅'''
print(x + y + z) # + 的使用
print('%s %s %s'% (x,y,z)) # %s的使用
print(''.join([x,y,z])) # join的使用
print(f'{x}{y}{z}') # f 方法
a = "{0} {1} {2}".format(x,y,z) # format的使用
print(a)
4.字符串格式化
# %d--格式化整数
# 格式化整数时,你可以决定格式化后这个字符串的字符宽度,只需要在d前面加上宽度位数。
print('%07d'%1234) # 默认用空格去填充不足的字符宽度,也可以指定0去填充
# 左对齐-
print('%-7d'%1234)
# 右对齐+
print('%+07d'%1234)
# %f--格式化浮点数
# 默认保留6位小数,如何指定保留几位小数。
# 保留3位小数
print('%.3f'%1.2346) # 四舍五入,以6开始
# 保留2位小数
print('%.2f'%1.256)
# 保留零位(整数)
print('%.0f'%1.555) # 四舍五入,以5开始
print('%09.2f'%1.223) # 保留9位宽度,0补充
# 左对齐-
print('%-09.2f'%1.223)
# 右对齐+
print('%+09.2f'%1.223)
# 字符串的format方法
>>> '{a:.2f}'.format(a=12.3333) # 保留两位小数
'12.33'
>>> '{a:09.2f}'.format(a=12.3333) # 保留两位小数,9宽度,0补充
'000012.33'
>>> '{a:<09.2f}'.format(a=12.3333) # <左对齐
'12.330000'
>>> '{a:>09.2f}'.format(a=12.3333) # >左对齐
'000012.33'
>>> '{a:^09.2f}'.format(a=12.3333) # ^居中对齐,shift+6(英文模式下输入)
'0012.3300'
# 指定其它符号对齐
>>> '{a:*^10}'.format(a=12.3333) # 符号一定是在最前面
'*12.3333**'
>>> '{a:*<9.2f}'.format(a=12.3333)
'12.33****'
# 百分号形式输出
>>> '{}'.format(0.35) # 直接使用format拼接
'0.35'
>>> '{:.2%}'.format(0.35) # 百分号形式拼接,保留两位小数
'35.00%'
>>> '{:.0%}'.format(0.35) # 百分号形式拼接,不保留小数
'35%'
四.条件语句
1.流程控制语句(if,elif,else)
if(如果)、else(否则)、elif(否则如果)
ianqi = 'xiayu'
if tianqi == 'xiayu':
print('在家学习')
else:
print("逛街")
tianqi = 'xiayu'
if tianqi == 'yintian':
print('运动')
elif tianqi == 'xiayu':
print('在家学习')
else:
print("逛街")
注意:
if 使用:if后面更上判断表达式,注意加上冒号和缩进
else 使用:else不能单独使用,后面直接跟上冒号,没有判断式
elif 使用:elif只能跟在if后面,不能单独出现
a = 6
if a > 5:
print(True)
else:
print(False)
# 等效于
print(True if a > 5 else False)
注意:只有简单if判断可以使用,过于复杂判断就不要使用了,那样会影响代码的可读性
五.逻辑运算 1.常见的判断符(比较运算符)
注意:比较运算符的返回结果都是bool型
在实际使用中,会经常用到它们,或者他们的组合
and
表示“并且”或者“和” 的意思,只有当 and 两边都是为真的时候,才会返回 真, 在其他语言中常用 & 来表示 and
or
表示“或者”的意思,只要两边存在真,就会返回真,都会假才会返回假, 在其他语言中常用 | 来表示 or
not
表示“取反”的意思,也就是真的会变成假的,假的会变成真的,在其他语言中常用 ! 来表示 not
为了优化我们的代码而存在的,在特定的条件下不需要计算完。
逻辑运算过程中,如果已经能够得到最后的值,则不会再进行后面的判断,这个称为逻辑短路
# and逻辑短路 a=3 >>> a>4 and b>1 False >>> a>2 and b>1
or 也存在逻辑短路,只要前面确定为True,则后面就不会再进行判断
a=3 >>> a==5 or b>1 True >>> a<5 and b>1六.while循环 1.while 的使用和 if 类似,判断为真的时候则运行缩进里面的代码,判断式为假时则停止循环
a = 1
while a < 5:
print(a)
a += 1
2.while 循环后面也可以接上else循环,当循环正常结束时,就会执行else 内的代码
a = 1
while a < 5:
print(a)
a += 1
else:
print('循环结束')
3.while 后面也可以直接跟上True,但是内部就必须要使用break来终止循环
a = 1
while True:
if a == 5:
break # 终止循环
print(a)
a += 1
else:
print('循环结束') # 没有执行
注意:使用break终止的循环,是不会执行else的内容
七.for循环循环次数由数据类型的长度决定,取完数据类型里面的内容,循环就结束
for i in '圣美':
print(i)
打印了2次
for循环可以把字符串里面的每个元素都依次取出来,自动赋值给变量 i, 然后再执行循环体内的代码块
for i in range(10):
print(i, end=',') # print 里面的 end 可以设置每个值打印之后输出的字符串,默认是换行
range 函数可以取到一个范围内的整数,取值的形式为左闭右开,左取右不取,相比 while 要方便很多
八.break(终止),continue(跳过)for循环 和 while循环中都可以使用break 和 continue
同时后面也可以接上else,当循环被break终止时,else不会执行
for i in range(1, 10):
if i % 2 == 0 or i % 2 == 3:
continue # 跳过偶数
elif i % 15 == 0:
break
else:
print(i, end=',')
else:
print('循环结束')
九.列表
存放各种数据类型,可以存放所有的数据类型
1.列表的定义用方括号包裹起来的就叫做列表
存放数据时,要存放的数据以逗号隔开,存放好之后,你可以选择变量赋值的形式接收使用
2.列表的索引(index)取值列表中每个元素在列表中的位置称为索引(index),可以通过索引值来取对应位置上的值
单值切片
list1 = ['西瓜','白菜','苹果',100] >>> list1[1] '白菜' >>> list1[-1]
注意:
1. 索引值是从0开始
2. 负索引就是从列表尾部往前数
3. 索引取值超过长度就会报错
列表还可以根据一个范围来取值,这称为切片
list1 = ['西瓜','白菜','苹果',100] # 双值切片 print(list1[0:2]) # 取出索引0-2范围的值,冒号隔开,左闭右开形式去取值 print(list1[0:4]) # 双值切片也可以通过负索引去取值 print(list1[-3:-1]) # 左闭右开,从左往右取 # 双值切片可以超过索引范围去取值 print(list1[0:100]) #三值切片,相应的加一个步长去取值 print(list1[0:5:2]) # 左闭右开去取值 # 三值切片通过负索引去取值分两种:从右往左取和从左往右取 # 从右往左取 print(list1[-1:-4:-2]) # 大的索引在前,小的索引在后,步长为负步长(左开右闭) # 从左往右取 # print(list1[-4:-1:2]) # 小的索引在前,大的索引在后,步长为正步长(左闭右开) # 切片的进阶使用 # print(list1[:3]) # 从0开始取,取到3,左闭右开 # print(list1[1:]) # 从1开始取取到最后一个值,左闭右开 # print(list1[:]) # 不给指定范围取所有 # print(list1[::]) # 步长默认为1
注意:
1.切片是两个范围之间取值,且后面的数取不到
2.切片时范围超过也没有关系
3.切片时还可以指定步长
单个添加append() 默认添加在最后
list1 = ['西瓜','白菜','苹果',100]
list1.append('梨子')
print(list1)
批量添加extend() 默认添加在最后,以列表形式添加多个
list1 = ['西瓜','白菜','苹果',100] list1.extend(['egg1','egg2']) print(list1)
值定位置添加insert() 索引
list1 = ['西瓜','白菜','苹果',100] list1.insert(1,'肉') print(list1)
列表相加的形式去添加
list1 = ['西瓜','白菜','苹果',100] list2 = ['鸡蛋','青椒'] list3 = list1+list2 print(list3)
注意:如果是直接两个列表相加,记得重新赋值,否则不会改变值
(2)删除:pop、remove、clear、del 这四个方法pop 单个删除 默认从最后一个元素删除
list1 = ['西瓜','白菜','苹果',100] a = list1.pop() # 通过pop删除的元素是可以被查看到的 print(a) print(list1)
pop 指定索引位置删除
list1 = ['西瓜','白菜','苹果',100] a = list1.pop(2) # 通过pop删除的元素是可以被查看到的 print(a) print(list1)
remove 指定元素删除 默认从左往右删
list1 = ['西瓜','白菜','苹果',100,'西瓜']
list1.remove('西瓜')
print(list1)
clear 一次性清空所有元素
list1 = ['西瓜','白菜','苹果',100,'西瓜'] list1.clear() print(list1)
del删除指定切片,默认清除全部
list1 = ['西瓜','白菜','苹果',100,'西瓜'] del(list1[:2]) print(list1)
注意:删除是不可逆的,所以删除前要确定好
(3)切片修改,重新赋值单值切片修改
list1 = ['西瓜','白菜','苹果',100] list1[0] = '葡萄' print(list1)
双值切片修改 不限制元素个数
list1 = ['西瓜','白菜','苹果',100] list1[:3] = ['美女','圣美'] print(list1) # 双值切片删除 # list1[:3] = [] # 若为空,则会删除 # print(list1)
三值切片修改,限制元素个数,每一个元素需要一一对应
list1 = ['西瓜','白菜','苹果',100] list1[0:4:2] = ['美女','圣美'] print(list1)(4)查找index 根据元素,找到元素的索引值
list1 = ['西瓜','白菜','苹果',100]
list_index = list1.index('西瓜')
print(list_index)
5.列表扩展方法
(1)copy()方法
复制,在原列表的基础上复制一个新的列表,新的列表不会影响原来列表里的元素
list1 = [2,3,4,5,6,7,8,8,3] a = list1.copy() a[0] = 1 print(list1) print(a)(2)id()函数
内存函数,查看数据类型的存储地址
list1 = [2,3,4,5,6,7,8,8,3] a = list1.copy() a[0] = 1 print(id(list1)) print(id(a))(3)count()统计
统计元素个数,出现的次数
list1 = [2,3,4,5,6,7,8,8,3,2,2] num = list1.count(2) print(num)(4)reverse()倒序
反向输出一个列表,会修改原列表的表结构
list1 = [2,3,4,5,6,7,8,8,9,0] list1.reverse() print(list1)(5)排序:sorted(临时排序)和sort(永久排序)
sorted() 对列表进行排序,默认升序,不会修改原列表,降序排序加入参数reverse=(True降序或False升序)
list1 = [2,3,4,5,6,7,8,8,9,0] a = sorted(list1, reverse=True) # 降序 print(list1) print(a)
sort() 对列表进行排序,默认升序,会修改原列表,降序排序加入参数reverse=(True降序或False升序)
list1 = [2,3,4,5,6,7,8,8,9,0] list1.sort(reverse=True) # 降序 print(list1)6.列表推导式
结合for循环快速生成一个列表
【如何在100以内得到所有偶数,将所有的偶数存放在一个列表list_a里面】
list_a = []
for i in range(101):
if i % 2 == 0: # 偶数
list_a.append(i)
print(list_a)
# 列表推导式公式
a = [i for i in range(101) if i % 2 == 0]
print(a)
十.元组
不可变数据类型,不可以被修改,只能进行查找操作。
1.元组定义类似列表,也可以索引取值,但是元素不能更改,一旦确定,就无法改变
tup1 = (20, )
tup2 = (20)
print('tup1 =',type(tup1)) # 查看数据类型
print('tup2 =',type(tup2)) # 查看数据类型
注意:如果元组只有一个元素,还是要跟上逗号“,”,否则会当作一个元素,而不是元组
tup1 = (20, '圣美','python','java',10,(2,2),[1,2]) tup2 = (0, '姑娘') print(tup1[:3]) print(tup1[0:5:2]) print(tup1+tup2)3.元组不能增、删、改 4.拆包:
将元组里面的元素拆分给多个变量去使用,变量个数不超过元组长度
tup = (1,2,3,4,5) a,b,c,d,e = tup print(a) print(b) print(c) print(d) print(e)
拆包时还可以选择变量前面加上* 号去接收,这种加上*特殊定义的变量就是用来一次性接收多个
tup = (1,2,3,4,5) a,*b,c = tup print(a) print(*b) # 若不加*号返回的是一个列表 print(c)



