Python学习笔记(一)之基本概念
第一章 Python 基本概念
第二章 Python 序列 控制语句 函数
第三章 Python 面向编程 异常处理 文件处理
第四章 Python 坦克大战
第五章 Python 并发编程 网络通信
文章目录
前言
主要通过课程视频和代码的练习了解和掌握Python的基本概念入门。
一、Python入门
主要是环境安装以及软件的使用,创建第一个python项目尝试海龟绘图
1.环境安装
下载python3.8环境和PYcharm进行第一行代码运行
2.基本格式
2.1缩进
-恰当的空格,缩进问题
逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
语句从新行的第一列开始。
- 缩进风格统一
每个缩进层次使用 单个制表符 或四个空格(IDE会自动将制表符设置成4个空格)
Python用缩进而不是{}表示程序块的层次关系 - Python区分大小写
2.2注释
- 单行注释
每行注释前加#号。当解释器看到#,则忽略这一行#后面的内容 - 段注释(多行注释)
使用三个连续单引号’‘‘或三个双引号"“”。当解释看到’’‘,则会扫描到下一个’‘’,然后忽略他们之间的内容。
# 我的第一个程序
print("hello world")
"""
多行注释
"""
3.海龟绘图
import turtle #导入turtle模块
turtle.showturtle() #显示箭头
turtle.write("高淇") #写字符串
turtle.forward(300) #前进300像素
turtle.color("red") #画笔颜色改为red
turtle.left(90) #箭头左转90度
turtle.forward(300)
turtle.goto(0,50) #去坐标(0,50)
turtle.goto(0,0)
turtle.penup() #抬笔。这样,路径就不会画出来
turtle.goto(0,300)
turtle.pendown() #下笔。这样,路径就会画出来
turtle.circle(100) #画圆
turtle.done() #程序结束,保持窗口存在
效果图
二、编程基本概念
1.python基本构成
Python程序由模块组成。一个模块对应python源文件,一般后缀名是:.py
模块由语句组成。运行Python程序时,按照模块中语句的顺序依次执行
语句是Python程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等
使用\行连接符
一行程序长度是没有限制的,但是为了可读性更强,通常将一行比较长的程序分为多行。这是,我们可以使用\行连接符,把它放在行结束的地方。Python解释器仍然将它们解释为同一行。
a = [10,20,30,40,\
50,60,70,\
80,90,100]
b = 'abcdefg\
hijklmn\
opqrst\
uvwxyz'
print(a)
print(b)
2.对象组成和内存示意图
对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作
标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识。
类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值范围以及可执行的操作。可以使用type(obj)获得对象的所属类型。
值表示对象所存储的数据的信息。使用print(obj)可以直接打印出值。
遇到的问题:在运行代码时,出现此问题:SyntaxError: Non-UTF-8 code starting with ‘\xa3‘ in file
意思是在运行的程序不是UTF-8的编码方式,需在代码的第一行加入**#coding:utf-8或者# coding=UTF8**
在Python中,变量也称为:对象的引用(reference)。变量存储的就是对象的地址。变量通过地址引用了“对象”。
变量位于:栈内存(压栈出栈等细节,后续再介绍)。
对象位于:堆内存。
3.标识符
3.1基本用法
区分大小写。如:sxt和SXT是不同的
第一个字符必须是字母、下划线。其后的字符是:字母、数字、下划线
不能使用关键字。比如:if、or、while等
以双下划线开头和结尾的名称通常有特殊含义,尽量避免这种写法。比如:__init__是类的构造函数
3.2查看关键字
3.3命名规则
4.变量和常量
4.1变量
变量的声明和赋值:用于将一个变量绑定到一个对象上,格式:变量名 = 表达式
等于号是一个赋值符
a = 123
运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算结果的对象;然后,将这个对象地址赋值给左边的变量。
删除变量和垃圾回收机制
可以通过del语句删除不再使用的变量。
如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。
4.2常量
Python不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值作出修改。
MAX_SPEED = 120
print(MAX_SPEED) #输出120
MAX_SPEED = 140 # 实际是可以改的。只能逻辑上不做修改。
print(MAX_SPEED) #输出140
链式赋值 :链式赋值用于同一个对象赋值给多个变量。x=y=123
系列解包赋值:系列数据赋值给对应相同个数的变量(个数必须保持一致)
a,b,c=4,5,6 相当于:a=4;b=5;c=6
5.数据类型
5.1基本内置数据类型
python中变量没有类型,但是对象都有类型,python中最基本的内置数据类型:
整型 int
整数,2345,10,50
浮点型 float
小数,3.14或者科学计数法314e-2
布尔型 bool
表示真假,仅包含:True、False
字符串型 str
由字符组成的序列。 “abc”,‘sxt’,“尚学堂”,“百战程序员”
a = 123
b = 3.14
b2 = 314e-3
c = True
d = "hello world"
print(type(a))
print(type(b))
print(type(b2))
print(type(c))
print(type(d))
print(("b2:" + str(b2)))
5.2数字和基本运算符
Python支持整数(如:50,520)和浮点数(如:3.14,10.0,1.23e2),
使用**divmod()**函数同时得到商和余数:
divmod(13,3)
(4, 1)
5.3整数
Python中,除了十进制,还有其他三种进制:
0b或0B,二进制 0 1
0o或0O,八进制 0 1 2 3 4 5 6 7
0x或0X,十六进制0 1 2 3 4 5 6 7 8 9 a b c d e f
使用int()实现类型转换:
- 浮点数直接舍去小数部分。如:int(9.9)结果是:9
- 布尔值True转为1,False转为0。 如:int(True)结果是1
- 字符串符合整数格式(浮点数格式不行)则直接转成对应整数,否则报错
自动转型:整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0的结果是10.0
5.4浮点数
浮点数用科学计数法表示。比如:3.14,表示成:314E-2或者314e-2
**round(value)**可以返回四舍五入的值。但不会改变原有值,而是产生新的值
增强型赋值运算符
5.5时间模块
计算机中时间的表示是从“1970年1月1日 00:00:00”开始,以毫秒(1/1000秒)进行计算。我们也把1970年这个时刻称为“unix时间点”。
python中可以通过time.time() 获得当前时刻,返回的值是以秒为单位,带微秒(1/1000毫秒)精度的浮点值。例如:1635063628.5632517
5.6 练习-多点坐标绘制折线图计算距离
import turtle
import math
#定义多个点的坐标
x1,y1 = 100,100
x2,y2 = 100,-100
x3,y3 = -100,-100
x4,y4 = -100,100
#绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
#计算起始点和终点的距离
distance = math.sqrt((x1-x4)**2 + (y1-y4)**2)
turtle.write(distance)
turtle.done() #该语句让程序等待,而不是直接退出窗口
5.7布尔值及运算符
5.7.1布尔值
Python2中没有布尔值,直接用数字0表示False, 用数字1表示True。
Python3中,把True和False定义成了关键字,但他们的本质还是1和0,甚至可以和数字相加。
有一些特殊的布尔类型值为False,例如False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。其他情况,均为True。
a = True
b = 3
c = a+b #c的值是:4
print(c)
print('空字符串的布尔类型的值:',bool("")) #False
print('空列表布尔类型的值:',bool([])) #False
print('None布尔类型的值:',bool(None)) #False
print('0布尔类型的值:',bool(0)) #False
print('字符串True和False转成布尔都是True:',bool("False")) #True
5.7.2逻辑运算符
a = False
b = True
c = not a and b
print(c)
True
5.7.3比较运算符
所有比较运算符返回1表示真,返回0表示假。这分别与特殊变量True和False等价。
5.7.4位运算符
5.7.5加法乘法补充
- 数字相加 3+2 结果是 5
- 字符串拼接 “3”+“2”结果是 “32”
- 列表、元组等合并 [10,20,30]+[5,10,100]结果是[10,20,30,5,10,100]
- 数字相乘 3*2 结果是 6
- 字符串复制 “sxt”*3 结果是 ”sxtsxtsxt”
- 列表、元组等复制 [10,20,30]*3 结果是 [10,20,30,10,20,30,10,20,30]
与C和JAVA不一样,Python不支持自增(++)和自减(–)
5.7.6同一运算符
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
== 用于判断引用变量引用对象的值是否相等,默认调用对象的 eq()方法。
整数缓存问题
命令行模式下,Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来C语言底层用数组实现,连续分配空间,便于查找,而并非是所有整数对象。
文件模式下,所有数字都会被缓存,范围是:[-无穷大,+无穷大])
缓存实现:[-5,256]仍然底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。
5.7.7成员运算符
5.7.5优先级问题
乘除优先加减
位运算和算术运算>比较运算符>赋值运算符>逻辑运算符
6.字符串
6.1基本特点
字符串的本质是:字符序列。Python不支持单字符类型,单字符也是作为一个字符串使用的。
Python3直接支持Unicode,默认就是16位Unicode编码,ASCII码是Unicode编码的子集。
使用内置函数**ord()可以把字符转换成对应的Unicode码;
使用内置函数chr()**可以把十进制数字转换成对应的字符。
>>> ord('A') #65
>>> ord('高') #39640
>>> chr(66) #'B'
>>> ord('淇') #28103
通过单引号或双引号创建字符串。例如:a=‘abc’ b=“sxt”
a = "I'm a teacher!"
print(a) #I'm a teacher!
b = 'my_name is "TOM"'
print(b) #my_name is "TOM"
连续三个单引号或三个双引号,可以帮助我们创建多行字符串。在长字符串中会保留原始的格式。
s='''
I
Love
Python
'''
print(s)
Python允许空字符串的存在,不包含任何字符且长度为0。
c = ''
print(len(c)) #结果:0
len()用于计算字符串含有多少字符。
d = 'abc尚学堂'
len(d) #结果:6
6.2 字符提取和替换replace
字符串是“不可改变”的,我们通过[]可以获取字符串指定位置的字符,但是我们不能改变字符串。
a = "123456asdfg"
a[3] = 5
a[3] = 5
TypeError: ‘str’ object does not support item assignment
只能通过创建新的字符串来实现。
a = "123456asdfg"
a = a.replace('3','5')
使用[]提取字符
正向搜索:最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推。直到len(str)-1为止。
反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
6.3 切片slice
标准格式为:[起始偏移量start:终止偏移量end:步长step]
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0则会当做0,终止偏移量大于“长度-1”会被当成-1。
6.4分割split和合并join
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
拼接字符串要点: 使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
比较+拼接符和join(),不同的效率
import time
time01 = time.time() #起始时刻
a = ""
for i in range(1000000):
a += "sxt"
time02 = time.time() #终止时刻
print("运算时间:"+str(time02-time01))
time03 = time.time() #起始时刻
li = []
for i in range(1000000):
li.append("sxt")
a = "".join(li)
time04 = time.time() #终止时刻
print("运算时间:"+str(time04-time03))
0.6458227634429932 +连接符
0.10674428939819336 join连接符
6.5常用方法
6.5.1查找
6.5.2查找去除首位信息
>>> "*s*x*t*".strip("*")
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " s xt ".strip()
's xt'
6.5.3查找大小写转换
a = "gaoqi love programming, love SXT"
6.5.4格式排版
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.ljust(10,"*")
'SXT*******'
6.5.4特征判断
- isalnum() 是否为字母或数字
- isalpha() 检测字符串是否只由字母组成(含汉字)
- isdigit() 检测字符串是否只由数字组成
- isspace() 检测是否为空白符
- isupper() 是否为大写字母
- islower() 是否为小写字母
>>> "sxt100".isalnum() #是否为字母或数字
True
>>> "sxt尚学堂".isalpha() #isalpha() 检测字符串是否只由字母组成(含汉字)
True
>>> "234.3".isdigit() #检测字符串是否只由数字组成
False
>>> "23423".isdigit()
True
>>> "aB".isupper() #是否为大写字母
False
>>> "A".isupper()
True
>>> "\t\n".isspace() #检测是否为空白符
True
6.6格式化format
通过 {} 和:来代替以前的 % 。format() 函数可以接受不限个数的参数,位置可以不按顺序。
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'
>>> a.format("高希希",6)
'名字是:高希希,年龄是:6'
>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"
>>> b.format("高淇",18)
'名字是:高淇,年龄是18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是19'
填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
**:号后面带填充的字符,只能是一个字符,**不指定的话默认是用空格填充
>>> "{:*>8}".format("245")
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("高淇","666")
'我是高淇,我喜欢数字**666***'
数字格式化
浮点数通过f,整数通过d进行需要的格式化
一般.2f用的最多,用于保留小数点后两位
6.7转义字符以及字符串拼接复制等
转义字符的基本使用:
字符串拼接
1.可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ 结果是’aabb’:
如果+两边都是字符串,则拼接。
如果+两边都是数字,则加法运算
如果+两边类型不同,则抛出异常
2.可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’结果是’aabb’
a = 'sxt'+'gaoqi' #结果是:'sxtgaoqi'
b = 'sxt''gaoqi' #结果是:'sxtgaoqi'
复制
a = 'Sxt'*3 #结果:'SxtSxtSxt'
不换行打印:通过参数end = “任意字符串”。
print("sxt",end=' ')
print("sxt",end='##')
print("sxt")
sxt sxt##sxt
6.8可变字符串
Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。
确实需要原地修改字符串,可以使用io.StringIO对象或array模块
import io
s = "hello, sxt"
sio = io.StringIO(s) #可变字符串
print(sio)
v1 = sio.getvalue()
print("v1:",v1)
char7 = sio.seek(7) #指针知道索引7这个位置
sio.write("gaoqi")
v2 = sio.getvalue()
print("v2:",v2)
三、总结
以上为python入门基本讲解,主要学习了pychram的软件安装和使用,使用turtle库绘制图形,掌握整数、浮点数、布尔值、字符串的基本使用,对于字符串的使用较多,需要后期再进行复习整,一些基本操作如拼接、复制、切片、分割、合并、格式化等后面都能用到。
以下是数据类型的转换表:
#类型转换
#转换为int
print('int()默认情况下为:', int())
print('str字符型转换为int:', int('010'))
print('float浮点型转换为int:', int(234.23))
#十进制数10,对应的2进制,8进制,10进制,16进制分别是:1010,12,10,0xa
print('int(\'0xa\', 16) = ', int('0xa', 16))
print('int(\'10\', 10) = ', int('10', 10))
print('int(\'12\', 8) = ', int('12', 8))
print('int(\'1010\', 2) = ', int('1010', 2))
#转换为float
print('float()默认情况下为:', float())
print('str字符型转换为float:', float('123.01'))
print('int浮点型转换为float:', float(32))
#转换为complex
print('创建一个复数(实部+虚部):', complex(12, 43))
print('创建一个复数(实部+虚部):', complex(12))
#转换为str字符串
print('str()默认情况下为:', str())
print('float型转换为str:', str(232.33))
print('int转换为str:', str(32))
lists = ['a', 'b', 'e', 'c', 'd', 'a']
print('列表list转换为str:', ''.join(lists))
#转换为list
strs = 'hongten'
print('序列strs转换为list:', list(strs))
#转换为tuple
print('列表list转换为tuple:', tuple(lists))
#字符和整数之间的转换
print('整数转换为字符chr:', chr(67))
print('字符chr转换为整数:', ord('C'))
print('整数转16进制数:', hex(12))
print('整数转8进制数:', oct(12))
四、课后练习
1.使用字符串复制,用计算机打印出“爱你一百遍”,打印 100 次
a = "爱你一百遍"*100
print(a)
2.从控制台输入用户的月薪,进行运算计算出年薪。打印输出用户的年薪
name = input("请输入你的名字:")
month_salary = input("请输入你的月薪:")
year_salary = int(month_salary)*12
print("name is :" ,name,"月薪是:" , year_salary)
3.使用 python 表示数学式:
a = '(5+10*x)/5' + '(-13*(y-1)*(a+b))/x'+ '9*((5/x)+(12+x)/y)'
print(a)