Python知识汇总(持续更新)
0.常用快捷键
快捷键 | 作用 | |
---|---|---|
批量注释 | Alt+3 | |
批量解注释 | Alt+4 | |
批量向左缩进 | Shift+Tab | |
批量向右缩进 | Tab | |
复制 | Ctrl+C | |
粘贴 | Ctrl+V | |
撤销操作 | Ctrl+Z | |
反撤销操作 | Ctrl+Y |
1.Python安装
- 勾选Add Python to Path,然后点击自定义安装
- 选择安装路径,然后点击Install
1.1 验证Python安装是否成功
- 去电脑中找到IDLE软件并打开
- 点击File-New File,创建一个文件
-
保存快捷键 Ctrl+S
-
F5运行代码
1.2 IDLE的代码调试功能
- 在代码中设置断点(Set Breakpoint)
- 在交互式命令行中点击Debug-Debugger
- 点击Over逐步执行程序
2. Python基本常识
2.1 Python的注释
# 单行注释
'''
多行注释
这是多行注释的第二行
这是多行注释的第三行
# 批量注释 Alt+3
# 批量解注释 Alt + 4
'''
2.2 Python的输入输出
- 输入input()
- 输出print()
a = input("请输入一个数字:") # 输入函数
print(a) # 输出函数
2.3 变量
计算机的最核心功能就是“计算”, 计算需要数据源,数据源要存在内存里。
计算机的内存可以看成是一块一块的小空间,而变量就是这些小空间的名字,在程序的运算中,只要“呼叫”数据的名字(变量),就能够访问到数据本身。
2.3.1 如何使用变量
变量名=变量值
例如:a=3 ,表示将3这个数字放到内存中名字叫做a的小空间中。
在编程语言中,=的意思是将=右边的值赋值给右边的变量,而不是相等的意思。
在a=3,这步运算中,cpu会分这样几个步骤:
-
在内存中开辟一块小空间
-
将新开辟的这块小空间命名为a
-
将3这个数据放到名字为a的小空间中
2.4 标识符
2.4.1 认识标识符
上一章我们学习了如何使用变量,其实变量的名字是我们可以自定义的,在Python中,所有可以让我们自定义名字的东西,都叫做标识符。变量名是标识符的一种,函数名、类名等都属于标识符的范畴。那我们如何来给标识符来起名字呢?
标识符命名规则:
-
标识符只能由字母、数字和下划线组成,但是数字不能开头。
-
Python保留字不能作为标识符使用。
-
命名时要见名知意,比如表示学生姓名,可以用student,虽然a也可以命名,但是明显看到student就能知道这个变量作用,所以student比a好。
-
如果需要两个或以上单词组合作为标识符,多个单词之间可以用下划线相连。
2.4.2 Python中的保留字
我们对这些保留字眼熟即可,后面我们的课程会对一些保留字进行讲解。
3.小练习
运用我们前面的知识,解决计算梯形面积的问题。
已知梯形的面积公式是:面积=(上底+下底)*高/2,
现请你使用input()函数输入相关的数据,然后使用print()函数输出梯形的面积。
提示:上底:top 下底:bottom 高:height
加:+ 减:- 乘:* 除:/
4. python运算符
4.1 算术运算符
- +
- -
- *
- /
- % 取余运算(模运算) 求两个数相除的余数 例如:10%3 结果 1
- * 幂运算 例如:3**4 = 3*3*3\3
- // 地板除 求两个数相除的整数部分 10//3 = 3
例子:五舍六入
# 实现5舍6入
s = input("请输入一个数:")
s = float(s)
# 0.25698
n1 = s*1000 # 256.98
n2 = n1//1 # 256
n3 = n2%10 # 6
result = 0
if n3>=6:
result = s+0.01 # 进位
result = result*100//1/100 # 0.26 舍掉多余的小数位
else:
result = s*100//1/100
print(result)
4.2 关系运算符(比较运算符)
- <
- >
- == 是否相等
- >=
- <=
- != 不等于
使用细节
- 像组合符号(>= 、<=),中间不能有空格
- 使用关系运算符时,计算的结果只有两种:True(真) 或 False(假)
a = 10
b = 5
c = 15
d = 5
print(a<=b) # False
print(a>=c) # False
print(b != d) # False
print(c>=d) # True
print(b == d) # True
print(b=d) # 报错
print(a<=b)
4.3 赋值运算符
赋值:将什么东西给什么东西
-
= 是最简单的赋值运算符
a = 10 将10这个值赋予a这个变量
-
+=
a = 10 a += 2 # 等价于 a = a + 2 priint(a) # a=12
-
-=
-
*=
-
/=
-
%=
-
//=
-
**=
a = 3 a**=4 # 等价于 a = a ** 4 print(a) # 81
4.4 逻辑运算符
-
and (逻辑与)
a = 10 b = 5 c = 8 print(a<=10 and c>b) # True print(a<=10 and c=100 and c
规律:两边的表达式只要有一个为False,那么整个结果就是False。必须两边都是True,结果才为True。
-
or (逻辑或)
a = 10 b = 5 c = 8 print(a<=100 or c>30) # True print(a>30 or b<2) # False print(a<=50 or b>0) # True
规律:两边的表达式,至少有一个是True,那么整个结果就是True
-
not (逻辑非) 单运算符
a = 10 b = 5 c = 8 print(not a>100) # True print(not c>b) # False
规律:将not后面的表达式的结果取反。
4.5 身份运算符
用来判断两个变量是否是同一个对象。
- is
- is not
4.6 成员运算符
判断一个对象是不是另一个对象的成员
- in
- not in
a = "魏来编程科技推广中心"
b = "编广"
c = "编程"
print(b in a) # False
print(c in a) # True
4.7位运算符
-
& 按位与
-
| 按位或
-
^ 按位异或
-
<< 按位左移
-
>> 按位右移
a = 3
b = 5
print(a&b) # 1
print(a|b) # 7
print(a^b) # 6
print(b<<2) # 20
print(b>>2) # 1
4.8 小练习
- 将笔记中的代码自己全部敲一下
- 将笔记中的内容(除了代码)要能够背下来
5. 基本数据类型
5.1 数字类型
数字类型就是一系列代表数值的数据。
5.1.1 整数类型 (int)
- 十进制表示形式 5 108 46
- 八进制表示形式 0o46
- 二进制表示形式 0b101101 0b101
- 十六进制表示形式 0x45A 0x78FA4
注意点:不同进制之间可以直接进行运算,运算结果都是10进制
数据类型强制转换:
##result = int(input("请输入一个数:"))
result = input("请输入一个数:")
# 将字符串类型的result转换成整数类型
result = int(result)
print(result*2)
5.1.2 浮点数类型(float)
- 一般表示形式: 3.14 5.789
- 科学计数法表示: 0.000000000000321 3.21E-13
a = 1.234
b = 3.21E-13
print(a)
print(b)
print(type(a)) # <class 'float'>
print(type(b)) # <class 'float'>
整数类型和浮点数类型计算的问题:
- 浮点数和整数类型做计算,结果一定是浮点数
- 整数和整数进行计算,结果有可能是浮点数,只要计算结果有产生小数的可能,那么结果一定是浮点数。
5.1.3 复数类型()
4+3j
j 代表根号下-1
符号前面的数字是实部,符号后面的数字叫虚部。
假设a是一个复数,那么,使用:
a.real 来获取它的实部
a.imag来获取它的虚部
注意:实部和虚部都是浮点数
a = 5-4j
print(a)
print(a.real) # 5.0
print(a.imag) # -4.0
5.1.4 数字类型总结
知识点总结:
- 各个进制数的特点
- 掌握如何将其他数据类型转换成整数类型
- 整数类型和浮点数类型计算的问题
- 求复数的实部和虚部
5.2 字符串类型 (str)
5.2.1 字符串的种类和表现形式
-
单行字符串
a = '我是一个单行字符串' b = "我还是一个单行字符串" print(a) print(b)
-
多行字符串
a = '''我是一个多行字符串
我还可以换行
我还能换好多行
'''
b = """我是使用双引号来表示的多行字符串
我还可以换行
我还能换好多行
"""
print(a)
print(b)
a = 45 # int
b = '45' # 字符串
print(a)
print(b)
print(type(a)) # int
print(type(b)) # str
5.2.2 \的作用
-
转义字符
a = '我是一个\n单行字符串' b = "我还是一个\"单行\"字符串" # \是转义字符 转义字符可以将普通字符转换成特殊字符,也可以将特殊字符转换成普通字符 print(a) print(b)
- \t 制表符
-
\n 换行符
-
\0 空字符
- 续行符
太长的代码中可以使用\作为续航符,虽然写在不同行,但是逻辑上是在一行的
a = "我是一个单行字符串我是一个\ 单行字符串我是一个单行字符串我是\ 一个单行字符串我是一个单行字符串我\ 是一个单行字符串我是一个单行字符串我是\ 一个单行字符串我是一个单行字符串我是一\ 个单行字符串我是一个单行字符串我\ 是一个单行字符串"
5.2.3 字符串的索引
索引就是字符所在字符串的编号。
从左向右,从0开始,依次计算
从右往左,从-1开始,依次计算
a = "我是单行字符串"
print(a[3])
5.2.4 区间的概念
- [ ]:代表闭区间
- ( ):开区间
- [ ):闭开区间
- (]:开闭区间
5.2.5 字符串的切片
语法:字符串变量 [ 开始的索引 : 结束的索引 : 步长]
a = "我是单行字符串"
print(a[2:4])
# ‘单行’
# 这种写法是错误的
a = "我是单行字符串"
print(a[-3:2])
# 下面是正确的写法
print(a[2:-3])
字符串的切片中,在逻辑上左边的字符索引要先写,逻辑上在右边的字符索引后写
步长:每几个字取一个字符,例如:
a = "我是单行字符串"
print(a[0:5:3])# 我行
5.2.6 切片的隐藏用法
- 如果从字符串的开始(0的位置)切,那么0可以省略。
- 如果切到字符串的末尾,则末尾的数字可以省略。
5.2.7 小练习
# 小练习:a = '西游记红楼梦水浒传三国演义'
# 1.西游记
# 2.红楼梦
# 3.水浒传
# 4.三国演义
# 5.西红水三
# 6.西游记红楼梦水浒传三国演义
答案:
a = '西游记红楼梦水浒传三国演义'
print(a[0:3])
print(a[3:6])
print(a[6:9])
print(a[9:13])
print(a[0:11:3])
print(a[0:13])
a = '西游记红楼梦水浒传三国演义'
print(a[:3])
print(a[3:6])
print(a[6:9])
print(a[9:])
print(a[:11:3])
print(a[:])
5.2.8 字符串的格式化
5.2.8.1 %形式格式化
需求:打印:小明今年的年龄是多少岁。其中年龄是一个变量。
age = int(input("年龄:"))
print("小明今年的年龄是%d岁" % age)
”%[位置][宽度][.精度]占位符种类“ % 占位数据
pi = 3.1415926
print("圆周率的值是:%-10.2f"%pi) # %-10.2f 代表按10位宽度输出,数字居左,并且保留2位小数
占位符 | 占位符说明 |
---|---|
%d | 占位整数 |
%f | 占位浮点数 |
%s | 占位字符串 |
5.2.8.2 format形式格式化
需求:打印:小明今年的年龄是多少岁。其中年龄是一个变量。
age = 18
print("小明今年的年龄是{}岁".format(age))
-
{} 叫做槽,是用于占位数据的
-
槽中还可以有序号,序号要从0开始,填充数据时按照序号的顺序来填
age = 18 name = '小王' print("{1}今年的年龄是{0}岁".format(age,name))
-
槽中可以填写字符串格式化控制符,用来指定格式,让填充的数据以指定的格式来输出
s = '魏来编程'
print("{:#^30}".format(s))
# #############魏来编程#############
print("{:,}".format(18000000000000000000000000000000))
# 有效数字:
print("{:.4}".format(3.141592653))
5.2.9 字符串常用的处理函数和方法
s = "数学成绩是100分"
# 求字符串的长度
print(len(s))
# 将任意类型转换成字符串类型
a = 2.14
print(str(a))
# 求64所对应的UTF-8码表当中的字符
print(chr(65))
# 求字符所对应的编码
print(ord('A'))# 65
# 整数转16进制的字符串
a = 56
print(hex(a))
# 整数转8进制的字符串
print(oct(a))
需要记忆的字符编码:
- A 65
- a 97
- \0 1
s = "abcdefgcHIjkLMcNOpq"
print(s.lower())
print(s.upper())
s2 = "文明,公正,民主,富强"
ls = s2.split(",")
print(ls)
print(ls[0])
print(ls[1])
print(ls[2])
print(ls[3])
r = s.count('c')
print(r)
s3 = s2.replace("公正","和谐")
print(s3)
s4 = s2.replace(",","|")
print(s4)
s5 = " dgsdf sdf dasfg "
s6 = s5.strip(' ')
print(s6)
s7 = "文明和谐民主富强"
s8 = ",".join(s7)
print(s8)
5.2.10 小练习
-
打印自己的名字,要求30位宽度输出,数据居右显示,空白的地方填充*号
-
定义一个浮点数类型的数据,按50位宽度输出,保留4位小数
-
定义3个整数型变量,分别代表学生的数学、语文、英语,三科的成绩,定义一个字符串变量,代表人名,要求输出这样的一句话:
谁的数学成绩是多少分,语文成绩是多少分,英语成绩是多少分,总分是多少分,平均分是多少分
-
求第三题中输出的字符串的长度是多少?
-
密码加密
将一个字符串中的各个字符先转换成字符编码,然后将编码乘3再加1,之后再转换回字符串。
①将 “有内鬼,停止交易” 转换成密文。
②再将密文按照上面规则解密成明文
-
①将 “文明,公正,民主,富强” 中的逗号替换成*号
②将上一步得到的字符串中的 民主 替换成 更高更快更强
③将上一步的到的字符串,每两个字符之间添加一个#号
④将上一步的到的字符串,按照#分割,并打印分割之后的内容
6.流程控制
6.1 流程控制概述
流程控制就是使用一一些特定的语法,来改变程序的执行流程,比如,要对一种情况进行判断,如果条件成立则执行一种操作,如果不成立则执行另一种操作,这种结构叫做分支及结构。分支结构中的语句并不是从上到下依次执行的,而是有条件的执行。再比如,我们要重复执行一段任务,这就需要使用到循环结构,循环结构也不是从上到下依次执行的。使用分支结构和循环结构对程序执行流程进行控制,就叫做流程控制。
程序的三大结构
- 顺序结构
- 分支结构
- 循环结构
6.2 分支结构
6.2.1 单分支结构
if 条件表达式:
<缩进>分支语句
# 如果明天天气好,我就去打篮球
b = False6
if b:
print("打篮球")
6.2.2 二分支
单分支结构,他只关注了条件成立的情况,如果条件不成立,那么终端则没有任何输出,这对用户是非常不友好的,最好也要给出不成立的情况下的做法。
if 条件表达式:
<缩进>分支语句1
else:
<缩进>分支语句2
# 如果明天天气好,我就去打篮球
b = False
if b:
print("打篮球")
else:
print("在家看电视")
6.2.3 多分支
if 条件表达式1:
<缩进>分支语句1
elif 条件表达式2:
<缩进>分支语句2
elif 条件表达式3:
<缩进>分支语句3
...
else:
<缩进>分支语句n
score = int(input("请输入分数:"))
if score>=90 and score<=100 :
print("A")
elif score>=80 and score<90:
print("B")
elif score>=70 and score<80:
print("C")
elif score>=60 and score<70:
print("D")
##elif score<60:
## print("E")
else:
print("E")
6.2.5 总结
- 单分支语句只关注条件成立的情况下。
- 二分支用于判断一个条件的两种情况(成立或者不成立),二分支语句必然执行其中一条分支语句。
- 多分支语句用于多个条件的判断,至多执行一条分支语句。
6.2.6 分支小练习
- 输入一个数,如果是偶数,则输出0,是奇数则输出1
- 读入一个整数,若这个数大于1并且小于100,则输出
yes
。 - 输入三个整数,按从大到小的顺序输出。
- 输入温度t的值,判断是否适合晨练。(25≤t≤30,则适合晨练
ok!
,否则不适合no!
) - 任意输入一个字符,判断其Unicode码是否是奇数,若是,输出YES,否则,输出NO。例如,字符A的Unicode值是65,则输出YES,若输入字符B(Unicode值是66),则输出NO。
- 判断一个正整数是否是两位数(即大于等于10且小于等于99)。若该正整数是两位数,输出1,否则输出0。
6.3 循环结构
6.3.1 for循环
-
基本结构
for 循环变量 in 可迭代对象:
缩进 循环体
for i in range(100): print(i)
例子:计算1-100的和
s = 0 for i in range(1,101): s+=i print(s)
-
range()函数的用法
range()函数返回的是一个类列表的类型,例如range(100),生成的是0-99的类列表,range(1,101)生成的是1-100的类了列表
-
for循环的执行流程
例题:
# 求1-1000之内的所有偶数的和
s = 0
for i in range(1,1001):
if i%2==0:
s+=i
print(s)
# 练习:求1-1000之内,3的倍数,5的倍数,7的倍数的和。
s = 0
for i in range(1,1001):
if i%3==0 or i%5==0 or i%7==0:
s+=i
print(s)
# 求所有的水仙花数。一个三位数各个位上的数字的立方之和等于这个数本身,那么这个数
# 就是水仙花数,例如:153 = 1*1*1+5*5*5+3*3*3
for i in range(100,1000):
i = str(i)
bai = int(i[0])
shi = int(i[1])
ge = int(i[2])
if bai*bai*bai+shi*shi*shi+ge*ge*ge == int(i):
print(i)
6.3.2 while循环
-
基本结构
while(条件表达式):
循环体
-
执行流程
-
例题:
# 对于正整数n,求s=1+2+3……+n,当加到第几项时,s的值会超过1080? # while 循环 # 基本结构: # while(条件表达式): # 循环体 s = 0 i = 1 while(s<=1080): s+=i i+=1 print(i) # 找出所有与7有关的4位数。(是7的倍数,或者某一位上有7) i = 1000 while(i<=9999): s = str(i) if (i%7==0) or ('7' in s): print(i) i+=1
-
6.3.3 循环控制符
-
break
# 通过循环来统计字符串中前多少个字符相同 ''' break 退出,跳出 可以结束当前所在的循环,跳向当前所在循环后面的语句 ''' s1 = input("第一个字符串:") s2 = input("第二个字符串:") n = 0 for i in range(0,len(s1)): if s1[i] != s2[i]: break n+=1 print(n)
例题:
# 已知三个正整数a,b,c。现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 # 请问满足上述条件的x的最小值是多少? a = int(input("a:")) b = int(input("b:")) c = int(input("c:")) x = 2 # while(not(a%x == b%x and b%x==c%x)): # x+=1 # print(x) while(True): if a%x == b%x and b%x==c%x: print(x) break x+=1
-
continue
''' continue 继续 退出本次循环,继续进行下一次循环 ''' # 打印100以内的奇数 for i in range(101): if i%2 ==0: continue print(i)
例题:
# 找出字符串a中和字符串b中不相同的部分。 a = input("a:") b = input("b:") for i in range(0,len(a)): if a[i] == b[i]: continue print(a[i])
6.3.4 循环嵌套
循环是可以嵌套使用的,里面的小循环执行完一轮,外面大循环才会迭代一次
# 打印5x5空心正方形
for i in range(5):
for j in range(5):
if i==0 or i==4:
print("*",end=" ")
else:
if j==0 or j==4:
print("*",end=" ")
else:
print(" ",end=" ")
print()
# 打印5x5实心正方形
for i in range(5):
for j in range(5):
print("*",end="")
print()
# 打印nxn的空心三角形
n = int(input("请输入数字:"))
for i in range(1,n+1):
for j in range(i):
# print("*",end="")
if i==1 or i==n or j==0 or j==i-1:
print("*",end="")
else:
print(" ",end="")
print()
例题:
# 百钱买百鸡问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
for x in range(20):
for y in range(33):
if (100-x-y)%3 !=0:
continue
if x*5+y*3+(100-x-y)/3 == 100:
print("鸡翁:%d,鸡母:%d,鸡雏:%d"%(x,y,100-x-y))
6.3.5 练习
- 找出所有与7有关的4位数。(是7的倍数,或者某一位上有7)
- 谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。