1 认识python
1.1 认识python
计算机识别机器语言,机器语言由二进制0和1组成
计算机要执行高级语言,转换方式
- 编译 : C语言、C++、java。 一次性编译成可执行文件
- 解释 : 一行一行地解释
python是解释型语言
python解释器、pycharm编辑器
举个例子:
要给工地煮饭
编译:把饭菜都做好,做成盒饭(.exe,.class)。带到工地,只需要加热即可使用
解释型:把原材料和锅都带到工地,现场炒菜。
编程语言是用来定义计算机程序的语言,用来向计算机发出指令。
python语言是一种面向对象的解释型计算机程序设计语言
python是强类型动态脚本语言
- 强类型:不允许不同类型相加
- 动态:不使用显示数据类型声明,比如说a=10
- 脚本语言:一般是解释型语言,运行代码只需要一个解释器
1.2 第一个程序
1.2.1 使用cmd命令执行
新建一个python文件
注:要显示后缀名
print("hello world")
在cmd中输入
python xxx.py
1.2.2 使用pycharm执行
在pycharm中配置python解释器
在pycharm中新建一个项目
新建python文件
写入print("hello world")
运行即可
1.3 BUG
bug的翻译是一个虫子,表示电脑系统中隐藏的错误与缺陷
invalid syntax 无效语法
unexpected indent 缩进问题
中文符号和英文符号是不一样的
缩进也要注意
tab 向右缩进
shift+tab 向左缩进
1.4 注释
对代码进行解释说明
在执行的时候,注释是不会被执行的。
单行注释:任意位置都可以了
多行注释:要服从缩进要求
1.4.1 单行注释
# 单行注释
print("Hello")
快捷键:Ctrl+/
撤销 : Ctrl+z
复制到下一行:Ctrl+d
搜索: Ctrl+F
1.4.2 多行注释
'''
这是三个单引号的多行注释
这是三个单引号的多行注释
这是三个单引号的多行注释
'''
print("hello")
"""
这是三个双引号的多行注释
这是三个双引号的多行注释
这是三个双引号的多行注释
"""
2 变量
2.1 运算符
+ #加
- #减
* #乘
/ #除
// #整除
% #取余
** #幂次方
1/2 # 得到1.5
1//2 # 得到0
5//2 # 得到2
3**2 # 得到9
2**3 # 2*2*2=8
9%2 # 得到1
优先级:
幂运算 **
乘、除、取余、取整除 + 、 % //
加减 + -
4*2**3 #幂运算的优先级较高
= #赋值运算符
+= # n += 1 等价于 n = n+1
-= # n -= 1 等价于 n = n-1
*= # n *= 2 等价于 n = n*2
/= # n /= 2 等价于 n = n/2
%=
**=
//=
2.2 变量
将运行的结果保存起来
概念:一个容器,计算机当中的存储空间
作用:在计算机内保存数据
保存数据的格式: 变量名=值
在python中是没有变量类型的,变量名更像是一个便利贴,把便利贴贴到数据上。
举个例子:
某城市要打造运动城市,那么就需要盖很多的运动场馆,每个场馆就是一个变量。
对于C语言、C++、Java等语言,
如果要举办足球比赛,那么就需要专门搭建一个足球场。在这个足球场馆中只能举办足球比赛。
如果要举办篮球比赛,那么就需要专门搭建篮球场馆。
int a; //搭建一个int场馆
a = 10 //只能放int类型的数据
char b; //搭建一个shar场馆
b = 'c' //只能放char类型的数据
对于Python、javascript等语言,
不需要专门搭建场馆,随便指定个场馆,贴个足球场的牌子,就称为了足球场。
贴个篮球场的牌子,就成了篮球馆。
a = 10 # 贴个便利贴,这是int场馆
a = 'c' # 贴个便利贴,这是char场馆
查看变量类型
a = 100
print(type(a))
a = "python"
print(type(a))
2.3 变量的命名规范
变量的命名规范
- 只能由数字,字母,_(下划线)组成
- 不能数字开头
- 不能是关键字
- 区分大小写
注意:变量要见名知义
a_1 = "a"
aaa = "c"
a12 = "d"
_a = 20
2a = "c" #错误,不能以数字开头
print = 10 #错误不能用关键字
type = 20 #错误不能使用关键字
he!he = 20 #不可以,!不能出现
A = 10
a = 20
print(A) #区分大小写的
print(a) #区分大小写的
# 可以使用中文,但是不推荐
年龄 = 18
print(年龄)
# 查看所有关键字
import keyword
print(keyword.kwlist)
下划线分割命名法
my_name = "张三"
my_job = "律师"
驼峰命名法
myName = "张三"
myJob = "律师"
FirstName = "伊丽莎白"
2.4 输入输出
输出
print(123)
print("张三")
a = '''
张三
李四
'''
print(a)
转义字符
\t #表示制表符,表示4个空格
print("abc\tdef")
\n #表示换行符
print("hello\nworld")
\r 相当于回车
print("hello\rworld")
\\ 表示反斜杠符号
print("hell\\o")
input函数
name = input("请输入名字")
print(name)
3 数据类型
3.1 数据类型
int 整数类型 : 任意大小的整数
float 浮点型
bool 布尔型
complex 复数(了解)
a = 10
print(type(a)) #整数
b = 10.2
print(type(b)) # 浮点数
c = True #bool类型
print(type(c))
# True相当于非零
# False相当于零
print(False+2)
# 复数 包含 实部和虚部
# 固定写法 z = a+bj 其中a为实部,b为虚部
print(1+2j)
a = 1+2j
b = 3+4j
print(a+b)
print(a*b)
3.2 字符串
名称:str
# 字符串要加引号,单引号、双引号、三引号都可以
name = "zhangsan"
print(name)
print(type(name)) #字符串类型
name2 = '伞兵一号,准备就绪'
print(name2)
print(type(name2))
# 用三引号进行定义
name3 = '''
你怎么睡得着的?
你这个年龄段睡得着觉?
'''
print(name3)
字符串的运算符
+ # 字符串拼接
a1 = "hello " + "python"
print(a1)
a1 = "hello"
b1 = "teacher"
print(a1+" "+b1)
* # 重复输出
print("hello"*3)
print(a1*3)
# 成员运算符:检查字符串中是否包含了某个字符
# in
# not in
a1 = 'hello'
print('h' in a1) #判断a1中是否包含h
print('h' not in a1) #判断a1中是否不包含h
3.3 下标及切片
下标是从0开始的
# 下标: 从0开始
name = 'python'
print(name)
print(name[0]) #写法:字符串名[下标]
print(name[4])
print(name[10]) # 数组越界,超出下标范围
print(name[-1]) #取最后一个
print(name[-2]) #取倒数第二个
切片,截取一段数据
[起始:结束:步长]
# [起始:结束:步长]
name = "python"
print(name[0:3:1]) #左闭右开
print(name[0:3]) #左闭右开
print(name[2:4])
print(name[-3:-5]) #空,没有取到
print(name[4:2]) #空
print(name[-5:-3]) #导数第五个开始
# 步长 表示选取间隔 不写步长,默认是1
# 步长的绝对值大小绝对值决定数据的间隔,正负号决定方向
print(name[4:2:-1]) #从右往左取
print(name[-3:-5:-1])
print(name[3:]) # hon
print(name[:]) #python
print(name[::2]) #pto
# 对字符串进行逆序
print(name[::-1]) #nohtyp
3.4 格式化输出
占位符
占位符 | 作用 |
---|---|
%s | 字符串 |
%d | 整数 |
%4d | 整数,四位,如果不足前面补充空白 |
%f | 浮点数 |
%.4f | 设置小数位数,四舍五入 |
%% | 输出% |
# 占位符 %格式化输出
# %s 字符串
name = "张三"
print("这是一个字符串:%s" % name)
print("年龄:%d,姓名%s"%(18,name))
a = 1.2345
print("%f"%a) #默认后六位
format() 使用多括号来代替百分号
print("我是{},年龄{}".format("张三",20))
f 表达式
name = "张三"
age = 18
print(f"我叫:{name},今年:{age}")
3.5 类型转换
待补充
4 if 判断
根据条件是否满足,来执行相应的代码
age = 16
if age >= 18: #英文冒号
print("已经成年了")
4.1 比较运算符
比较运算符
== # 两个变量的值是否相等
!= # 比较值是否不相等
a = 4
b = 3
if a>b:
print("a的值大")
print(a == b)
print(a != b)
if a==b:
print("a和b相等")
4.2 逻辑运算符
and 与
or 或
not 非
# and 需要两个都成立才行
name = "zhangsan"
age = 18
if name == "zhangsan" and age == 18:
print("两个都满足")
if name == "zhangsan" or age == 18:
print("两个满足一个即可")
if not (name=="zhangsan"):
print("不等于张三")
4.3 if-else
age = 16
if age>=18:
print("已经成年了")
else:
print("还没有成年")
a = 1
b = 2
if a < b:
print("a比b小")
else:
print("a比b大")
4.4 三目运算符
# a if a>b else b
# 格式 为真的结果 if 判断条件 else 为假的结果
a = 1
b = 2
print('a比b小' if a<b else 'a比b大')
4.5 if-elif
if 条件1:
代码语句
elif 条件2:
代码语句
elif 条件3:
代码语句
sc = 85
if sc >= 85:
print("优秀")
elif sc >= 75 and sc <=84:
print("良好")
elif sc >= 60 and sc < 75:
print("及格")
elif sc >= 0 and sc <60
print("不及格")
python中可以使用连不等,其他语言不行
sc = int(input("请输入成绩"))
if 85 <= sc <= 100:
print("优秀")
elif 75 <= sc < 85:
print("良好")
elif 60 <= sc < 75:
print("及格")
elif 0 <= sc < 60:
print("不及格")
else:
print("成绩无效")
4.6 if嵌套
if 条件1:
if 条件2:
执行语句
d = 0 #是否有车偏偏
d = 1 #是否有危险品
if p==1:
print("你有票,开始安检")
if d==1:
print("有危险品,不能进去")
else:
print("可以进站了")
else:
print("赶紧抢票")
5、循环
5.1 while循环
# while 条件:
# 循环体
# 改变变量
i = 0
while i<=20:
print(f"我要好好学习{i}")
i += 1
# 计算1-100的和
i = 1
s = 0
while i<=100:
s += i
i += 1
print(f"0-100的和为{s}")
i = 1
s = 0
while i<=100:
s += i
i += 1
else: #当while条件不满足时执行
print(f"0-100的和为{s}")
5.2 while嵌套
a = 1
while a < 4:
print(a)
b = 1
while b < 5:
print("这是b值")
b += 1
a += 1
九九乘法表
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{i}*{j}={i*j}",end="\t")
j += 1
i += 1
print()
5.3 for循环
# for 临时变量 in 可迭代对象:
# 操作代码
name = "zhangsan"
for i in name:
print(i)
# range(开始,结束,步长) 左闭右开
for i in range(1,6):
print(i)
s = 0
for i in range(0,101):
s += i
print("1-100的和",s)
5.3 break和continue
break :结束当前循环
continue: 直接进入下一轮循环
i = 0
while True:
print("hello")
if i > 4:
break
i += 1
i = 0
while i < 10:
print(i)
if i == 4 or i==5:
continue
i += 1
6、字符串、列表
6.1 字符串编码
ASCII 编码
GBK
UTF-8
编码: encode()
解码: decode()
encode : 将其他编码的字符串转换为Unicode编码
decode : 将unicode编码转换成其他编码的字符串
a = 'hello'
print(a)
a1 = a.encode() #编码
print(a1)
print(type(a1)) #<class 'bytes'>
a2 = a1.decode() #解码
print(a2)
print(type(a2))
a = "你好啊"
a_encode = a.encode()
print(a_encode)
6.2 字符串常见操作
find() # 查找字符是否包含在字符串中,找到返回开始的索引下标,找不到返回-1
name = "互联网水太深互联网"
name.find("互联网")
name.find("互联网",3) #从下标3开始寻找
name.find("你好") #没找到,返回-1
index() # 跟find方法类似,不过没找到会抛出异常
count() #计算字符串出现的次数
print(name.count("互")) # 总共出现2次
replace() #字符串的替换
name = "在干嘛?吃了吗,吃了吧"
name.replace("吃","睡") #把吃替换成睡
name.replace("吃","睡",1) #只替换一次
split() #字符串的分割
name = "哈哈哈哈x哈哈哈哈x嘻嘻嘻xxx"
name.split("x") #按照x进行切割
name.split("x",2) # 只切割两刀
name = "hello"
# capitaliza() #第一个字母大写
print(name.capitalize()) #Hello
# startswith()
print(name.startswith("he")) #判断是否以he开头
# endswith()
print(name.endswith("lo")) #判断是否以lo结尾
# lower() 转换为小写
print(name.lower())
# 转换为大写
print(name.upper())
6.3 列表的相关操作
li = ['zs','ls','ww',2,3,4,5]
print(type(li)) #<class 'list'>
print(li[0])
print(li[-1]) #最后一个
#切片操作也是可以的
print(li[3:6])
print(li[1:4,2])
# 添加元素
# append
# extend
# insert
li2 = [1,2,3,4,5]
li2.append('10') #只添加一个元素
li2.extend(['4','5','6']) # 添加一个list
li2.insert(3,'11') # 在指定的位置插入元素11
# 修改元素
# 通过下标修改
li2[2] = '你好'
# 查找元素
# in 如果存在返回True
# not in
# index
# count
li2 = ["张三","李四","王五"]
print("张三" in li2)
print("张三" not in li2)
print(li2.index("李四")) #查找李四的下标,找不到报错
print(li2.count("李四")) #李四出现的次数
#删除元素
# del
# pop
# remove
li2 = [1,'b','c','d']
del li2[2] # 根据下标删除
li2.pop() # 删除最后一个元素
li2.pop(3) # 删除下标为3的元素
li2.remove('c') # 根据元素的值进行删除
# 排序
# sort : 默认是从小到大
# reverse
li3 = [1,2,9,4,3]
li3.reverse() # 对list中的元素逆序
li3.sort() # 进行排序,升序
li3.sort(reverse=True) #倒序排序
li4 = sorted(li3,reverse=True) #倒序排序
6.4 列表推导式
# [ 表达式 for 变量 in 列表]
# [ 表达式 for 变量 in 列表 if 条件]
l = [i for i in range(100)] #取1-100的所有数字
l2 = [i for i in range(100) if i%2==0] #取偶数
6.5 列表嵌套
列表中包含列表
li = [1,2,3,[4,5,6]]
print(li[1])
print(li[3][0])
print(li[3][2])
7、元组、字典、集合
7.1 元组
使用()进行定义
使用小括号进行定义
元组不可以修改元素
tu = (1,2,3)
print(tu)
print(type(tu))
当写元组的时候,只有一个元素,末尾一定要加逗号
tu = (1)
print(type(tu))
# <class 'int'>
tu = (1,)
print(type(tu))
# <class 'tuple'>
除了修改和删除,其他的操作与列表类似
tu3 = ('a','b','c','d')
print(tu3.index('b'))
print(tu3.count('b'))
7.2 字典
dic = {'name':"zhangsan",'age':18}
# 键值对的形式
print(dic)
print(type(dict))
# key 对应 value
# name 是键 、 "zhangsan"是值
# key 是唯一的,当key相同时,就会被覆盖
dic2 = {"name":"zhangsan", "name":"lisi"}
print(dic2["name"]) # 得到 lisi
字典的基本操作
dic = {"name":"zhangsan","age":18}
# 查看元素
# 变量名[key]
# 变量名.get(key)
print(dic["name"])
print(dic.get("name","不存在")) #如果没有key,返回不存在
# 修改元素
# 变量名[key] = vlaue
dic["name"] = "李四"
# 添加元素
# 变量名[key] = value
dic["job"] = "律师"
# 删除数据
# del 变量名[key]
# 变量名.clear() 清空整个字典
del dic["job"] #删除
del d #删除整个字典
dic.clear() #清空字典
字典的常见操作
d2 = {"name","zhangsan","age":18}
len() #键值对个数
print(len(d2))
keys() #所有key的列表
print(d2.keys())
values() #所有值的列表
print(d2.values())
items() #包含 键、值的列表
for key,value in d2.items():
print(key,value)
7.3 集合
使用{}进行定义
集合是无序的,也是唯一的
集合是通过hash()来确定唯一性。 整数的hash()就是本身hash(3)=3
,但是字符串的hash()每次都不一样
s1 = {1,2,3}
print(type(s1))
s1 = {1,2,4,3,5}
print(type(s1))
s1 = {1,2,3,4,4,4,6} #重复的会删除
print(s1)
print(type(s1))
# 添加元素
# add
# update
s1 = {1,2,3,4}
s1.add(8) #只能添加1个元素
print("添加后的",s1)
s1.update("678") #得到{1,2,3,4,'6','7'.'8'}
# 删除元素
# remove
# pop
# discard
s2.remove('6') #删除指定元素,有则删除,无则报错
s2.pop() #随即删除
print("删除后",s2)
s2.discard('6') #删除指定元素,有则删除,无则不操作
# 交集
# &
s1 = {3,4,5}
s2 = {5,6,7}
print(s1 & s2)
# 并集
# |
s1 = {3,4,5}
s2 = {5,6,7}
print(s1 | s2)