python概述
诞生于1990年,由 Guido van Rossum 设计并领导开发
2000年10月,python2.0正式发布
2010年,python 2.x 发布了最后一版,2.7
2008年12月,python3.0正式发布
python语法格式
注释
增加代码的可读性
快捷键 :Ctrl + /
# 单行注释
"""
多行注释
"""
'''
多行注释
'''
变量
变量就是存储数据的时候,当前数据所在的内存地址的名字
定义变量
变量名 = 值
变量名自定义,但要满足标识符的命名规则
标识符
标识符命名规则是python中定义各种名字时候的统一规范 :
- 由数字、字母、下划线组成
- 不能数字开头
- 不能使用内置关键字
- 严格区分大小写
命名习惯 :
- 见名知义
- 大驼峰 :MyName
- 小驼峰 :myName
- 下划线 :my_name
使用变量
# 定义变量
# 存储名字 TOM
MyName = "TOM"
print(MyName)
# 存储学校名称 :河南科技大学
SchoolName = "河南科技大学"
print(SchoolName)
debug
认识 bug
所谓 bug 就是程序中的错误。如果程序中有错误,需要程序员排查问题,并解决
IndentationError: unexpected indent 未知的缩进
数据类型
数值 :int(整型)、float(浮点型)
布尔型 :True 、False
字符串(str)
列表(list)
元组(tuple)
集合(set)
字典(dict)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GNoviXhj-1678778536330)(Python.assets/image-20211014165645460.png)]
# 检测数据类型 -- type(数据或变量)
# 整型 -- int
num1 = 1
print(type(num1)) # <class 'int'>
# 浮点数(小数) -- float
num2 = 1.1
print(type(num2)) # <class 'float'>
# 布尔型 -- boolean
a = True
print(type(a)) # <class 'bool'>
# 字符串 :str 单引号双引号都行
b = "Hello World!"
print(type(b)) # <class 'str'>
# 列表 -- list
c = [10, 20, 30]
print(type(c)) # <class 'list'>
# 元组 -- tuple
d = (10, 20, 30)
print(type(d)) # <class 'tuple'>
# 集合 -- set
e = {10, 20, 30}
print(type(e)) # <class 'set'>
# 字典 -- dict 以键值对的形式存储值
f = {"name": "TOM", "age": 20}
print(type(f)) # <class 'dict'>
格式化输出
常用到的格式化符号
格式符号 | 转换 |
---|---|
%s | 字符串 |
%d | 整数 |
%f | 浮点数 |
# 准备数据
age = 18
name = "TOM"
weight = 50.5
stu_id = 12
# 格式化输出数据
# 今年xx岁
print("今年%d岁" % age)
# 名字是xx
print("名字是%s" % name)
# 体重是xx -- 浮点数截取小数位 %.xf 如 :%.2f 保留两位小数
print("体重是%f" % weight)
print("体重是%.2f" % weight)
# 学号是xxx
print("学号是%d" % stu_id)
# 将学号输出为 012
print("学号是%03d" % stu_id)
# 名字是xx,年龄是xx
print("名字是%s,年龄是%d" % (name, age))
# 名字是xx,下一年年龄是xx
print("名字是%s,下一年年龄是%d" % (name, age+1))
# 名字是xx,年龄是xx,体重是xx,学号是xx
print("名字是%s,年龄是%d,体重是%.2f,学号是%06d" % (name, age, weight, stu_id))
小技巧 :
%0xd
: 输出的整数显示位数,不足以0补全,超出当前位数则原样输出 如 :%03d :表示输出的位数是3位
%.xf
:浮点数截取小数位 如 :%.2f 保留两位小数
拓展
%s
可以直接格式化字符串、整数、浮点数
# 名字是xx,年龄是xx,体重是xx
print("名字是%s,年龄是%s,体重是%s" % (name, age, weight))
格式化字符串的两种方式
格式化字符串除了 %s
,还有f'{表达式}'
name = "TOM"
age = 18
# 名字xx,年龄xx
print("名字%s,年龄%s" % (name, age))
print(f'名字{name},下一年年龄{age+1}')
f-格式化字符串是python3.6中新增的格式方法,该方法简单易懂,效率比%s
高效
转义字符
\n
:换行
\t
:制表符,一个 tab 键(4个空格)的距离
print("Hello\nWorld")
print("\tHello")
结束符
想想,为什么两个 print
会换行输出?
print("输出的内容",end="\n")
python 中 print()
默认自带end="\n"
这个换行结束符,所以导致两个 print
会换行输出
print("Hello",end="\t")
print("World")
# 输出的结果为 :Hello World
输入 – input
接收用户输入的数据的功能,就是输入功能
语法
input("提示信息")
特点
- 程序执行到
input
,等待用户输入,输入完成之后才继续向下执行 input
接收用户输入后,一般存储到变量中,方便使用input
会把接收到的任意用户输入的数据都当做字符串处理
password = input("请输入您的密码 :") # 直接一个 input 即可以完成输入功能
print(f'您输入的密码是 :{password}') # 输出的内容是上面输入的值
print(f'密码的类型为 :{type(password)}') # 密码的类型为 :<class 'str'>
拓展 :转换数据类型
input
函数接收用户输入的数据都是字符串类型,如果用户输入的123,我们需要将该值转换为整数
转换类型的函数
常用的函数
函数 | 说明 |
---|---|
int(x[,base]) | 将 x 转换为一个整数 |
float(x) | 将 x 转换为一个浮点数 |
str(x) | 将 x 转换为字符串 |
eval(str) | 用来计算在字符串中的有效python表达式,并返回一个对象。通俗来讲 eval() 就是把字符串中的数据转换为原本的数据类型 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
"""
步骤 :
1、input
2、检测input的数据类型
3、int() 转换数据类型
4、检验是否转换成功
"""
password = input("请输入您的密码 :")
print(type(password)) # <class 'str'>
print(type(int(password))) # <class 'int'>
num = 1
a = "10"
# float() -- 将数据转换为浮点型
print(type(float(num))) # <class 'float'>
print(float(num)) # 1.0
print(float(a)) # 10.0
# str() -- 将数据转换为字符串
print(type(str(num))) # <class 'str'>
print(str(num)) # 1
# tuple() -- 将一个序列转为元组
b = [10, 20, 30]
print(type(tuple(b))) # <class 'tuple'>
print(tuple(b)) # (10, 20, 30)
# list() -- 将一个序列转为列表
c = (10, 20, 30)
print(type(list(c))) # <class 'list'>
print(list(c)) # [10, 20, 30]
# eval() -- 用来计算在字符串中的有效python表达式,并返回一个对象
# 通俗来讲 eval() 就是把字符串中的数据转换为原本的数据类型
str2 = "1"
str3 = "1.0"
str4 = "(10, 20, 30)"
str5 = "[10, 20, 30]"
print(type(eval(str2))) # <class 'int'>
print(type(eval(str3))) # <class 'float'>
print(type(eval(str4))) # <class 'tuple'>
print(type(eval(str5))) # <class 'list'>
pycharm 交互开发
可以不需要使用 print()
函数,就可以直接输出了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZtvtShK-1678778536331)(Python.assets/image-20211014184109333.png)]
运算符的分类
- 算数运算符
- 赋值运算符
- 复合赋值运算符
- 比较运算符
- 逻辑运算符
算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 1+1 结果为2 |
- | 减 | 1-1 结果为0 |
* | 乘 | 2*2 结果为 4 |
/ | 除 | 10/2 结果为5.0,9/4 结果为2.25 |
// | 整除 | 9//4 结果为2 |
% | 取余 | 9%4 结果为1 |
** | 指数 | 2**4 结果为16 ,即为 2 * 2 * 2 * 2 |
() | 小括号 | 小括号用来提高优先级的 |
优先级问题 :()
高于 **
高于 *、/、//、%
高于+、-
赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 赋值 | 将= 右边的值赋值给左边的变量 |
多个变量赋值(一一对应)
# 多个变量赋值(一一对应)
a, b, c = 1, 2, 3
print(a)
print(b)
print(c)
结果如下 :[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sTL9WRGJ-1678778536331)(Python.assets/image-20211014190515556.png)]
多个变量赋相同的值
# 多个变量赋相同的值
d=e=f=10
print(d)
print(e)
print(f)
结果如下 :[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1f5aUXPj-1678778536331)(Python.assets/image-20211014190719177.png)]
复合赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
+= | 加法赋值运算符 | c += a 等价于c = c+a |
-= | 减法赋值运算符 | c -= a 等价于c = c-a |
*= | 乘法赋值运算符 | c * = a 等价于c = c * a |
/= | 除法赋值运算符 | c /= a 等价于c = c/a |
//= | 整除赋值运算符 | c // = a 等价于c = c+a |
%= | 取余赋值运算符 | c %= a 等价于c = c+a |
**= | 幂赋值运算符 | c **= a 等价于c = c+a |
特殊运算 :
c = 10
c *= 1+2
print(c) # 结果为30
由此可见 :赋值运算符的执行顺序是,先算后面的 ± ,在运算赋值运算符
即第二行代码执行过程为 :c *= 3
比较运算符
也叫关系运算符
运算符 | 描述 | 实例 |
---|---|---|
== | 判断相等。如果两个操作数的结果相等,则条件结果为真,否则条件结果为假 | 如 :a=3,b=3 则(a==b)为真 |
!= | 不等于。如果两个操作数的结果不相等,则条件为真(True),否则条件结果为假(False) | 如a=1,b=3,则(a != b)为True |
> | 运算符左侧操作数结果是否大于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=7,b=3,则(a >b)为True |
< | 运算符左侧操作数结果是否小于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=7,b=3,则(a<b)为False |
>= | 运算符左侧操作数结果是否大于等于右侧操作数结果,如果大于,则条件为真,否则为假 | 如a=3,b=3,则(a >= b)为True |
<= | 运算符左侧操作数结果是否小于等于右侧操作数结果,如果小于,则条件为真,否则为假 | 如a=3,b=3,则(a <= b)为True |
逻辑运算符
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | “与” :x 和 y 都为真,结果才为真;有一个为假,结果就为假 |
or | x or y | “或” :x 和 y 只要有一个为真,结果为真;两个都为假的时候,结果为假 |
not | x not y | “非” :取反 |
a = 10
b = 20
c = 30
# and
print(c>b and b>c) # False
print(c>b and b>a) # True
# or
print(c>b or b>c) # True
print(b>c or a>b) # False
# not
print(not False) # True
print(not b>c) # True
# 注意点 :如果运算符两侧的表达式比较复杂时候,建议加上小括号
print((c>b) or (b>c)
拓展 :数字之间的逻辑运算符
# and 运算符,只要有一个值为0,则结果为0,否则结果为最后一个非零的数字
print(0 and 1) # 0
print(1 and 2) # 2
print(2 and 1) # 1
# or 运算符,只有所有值为0,结果才为0,否则结果为第一个非0数字
print(0 or 1) # 1
print(1 or 2) # 1
print(2 or 1) # 2
if 语句
语法 :
if 条件:
满足条件要执行的代码
......
快速体验 if
score = int(input("请输入你的成绩 :"))
if score>60:
print(f"及格了,你的成绩是{score}")
if…else…
语法 :
if 条件:
满足条件要执行的代码
......
else:
满足条件要执行的代码
......
体验 if…else…
score = int(input("请输入你的成绩 :"))
if score>60:
print(f'及格了,成绩为{score}')
else:
print(f'不及格,成绩为{score}')
多重判断 if…elif…else…
语法 :
if 条件1:
满足条件要执行的代码
......
elif 条件2:
满足条件要执行的代码
......
......
else:
满足条件要执行的代码
......
最后可以没有 else
体验 if…elif…else…
score = int(input("请输入你的成绩 :"))
if score>90:
print(f'成绩为{score},优秀')
elif score>60:
print(f'成绩为{score},良好')
else:
print(f'成绩为{score},不及格')
age = int(input("请输入你的年龄 :"))
if age<18:
print(f'年龄为{age},童工')
elif age>60:
print(f'年龄为{age},退休年龄')
elif age>=18 and age<=60:
print(f'年龄为{age},合法')
age>=18 and age<=60
可以写成18<=age<=60
猜拳游戏
需求分析 :
需要的角色 :
- 玩家 :手动出拳
- 电脑 :随机出拳
判断输赢 :
- 电脑赢
- 玩家赢
- 平局
拓展随机数
1、导入 random 模块
import 模块名
2、使用 random 模块中的随机整数功能
random.randint(开始,结束) # 随机数的范围是[开始,结束]
猜拳案例
import random
# 定义玩家
player=int(input("请出拳 :0--石头,1--剪刀,2--布;"))
# 定义电脑 ,给出一个默认值
computer = random.randint(0, 2)
print(f'computer 出的是{computer}')
# 判断输赢
if player>2:
print("请输入正确的格式")
else:
if ((player == 0) and (computer == 1)) or ((player == 1) and (computer == 2)) or (
(player == 2) and (computer == 0)):
print("玩家获胜")
elif player == computer:
print("平局")
else:
print("电脑获胜")
三目运算符
也叫三元运算符、三元表达式
语法 :
条件成立执行的表达式 if 条件 else 条件不成立执行的表达式
快速体验
a = 3 if 1>2 else 6
print(a) # 6
while 循环
语法
while 条件:
代码块
......
快速体验
# 输出五遍 Hello World!!!
i = 0
while i<5:
print("Hello World!!!")
i+=1
# 计算1-100的和
sum = 0
i = 1
while i <= 100:
sum += i
i += 1
print(f'1-100的和 :{sum}')
# 计算 1-100 之间的偶数和
sum2 = 0
i = 1
while i <= 100:
if i % 2 == 0:
sum2 += i
i += 1
print(f'1-100 的偶数和 :{sum2}')
# 计算 1-100 之间的奇数和
sum3 = 0
i = 1
while i <= 100:
if i % 2 == 1:
sum3 += i
i += 1
print(f'1-100 的奇数和 :{sum3}')
while 循环嵌套
语法
while 条件:
代码块
...
while 条件:
代码块
...
应用
# 打印九九乘法表
i = 1
while i <= 9:
j = 1
while j <= i:
print(f'{j}*{i}={i*j}', end="\t")
j += 1
print()
i += 1
break 和 continue
break
和 continue
是退出循环的两种方式
break
:终止整个循环
continue
:退出当前一次循环继而执行下一次循环代码
for 循环
语法
for 临时变量 in 序列:
循环的代码块
......
序列 :一个数据内部是由多个数据组成的
快速体验
str1 = "hello"
for i in str1:
print(i)
执行结果 :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqRjOfna-1678778536332)(Python.assets/image-20211020171405626.png)]
range()
for i in range(10):
print(i) # 输出结果为[0,9)
for i in range(1,10):
print(i) # 输出结果为[1,9)
循环中的 else
循环也可以和 else 搭配使用,else 下方缩进的代码指的是 :当循环正常结束后要执行的代码
语法
# while循环
while 条件:
条件成立重复执行的代码
else:
循环正常结束之后要执行的代码
# for 循环
for i in 序列:
重复执行的代码
else:
循环正常结束之后要执行的代码
else 指的是循环正常结束后要执行的代码,即如果是break终止循环的情况,else 下方的代码将不执行
因为 continue 是退出当前循环,继续循环下一次,所以该循环在 continue 控制下是可以正常结束的,并且 else下方的代码也是执行的
字符串
表示方法
# 单引号
name = 'Tom'
# 双引号
name = "Tom"
# 三引号
name = '''姓名为Tom'''
name = """姓名为Tom"""
三引号的字符串支持换行功能
下标
下标 又称为 索引 ,就是编号。下标的作用是通过下标快速找到对应的数据
切片
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
语法
序列[开始位置下标:结束位置下标:步长]
注意 :
- 截取数据不包含结束位置下标对应的数据;即范围为 :[ 开始位置,结束位置 )
- 步长是选择间隔,默认步长为 1
- 下标和步长都可以为负数
快速体验
str1 = "0123456789"
# 通过下标获取的是该下标对应的字母
print(str1[2]) # 2
# 切片语法 :[开始位置的下标:结束位置的下标:步长]
print(str1[2:5:1]) # 234
print(str1[2:5:2]) # 24
# 如果不写开始位置,默认下标从0开始,步长默认为1
print(str1[:5]) # 01234
# 如果不写结束位置,默认下标到最后结束,步长默认为1
print(str1[2:]) # 23456789
# 如果不写开始和结束位置,表示选取所有,步长默认为1
print(str1[:]) # 0123456789
# 负数
# 如果步长为负数 ,表示倒叙选取
print(str1[::-1]) # 9876543210
print(str1[-4:-1:1]) # 678
print(str1[-4:-1:-1]) # 不能取出任何数据,如果数据选取方向(下标开始到结束的方向)和步长的方向起冲突,则无法选取数据
print(str1[-1:-4:-1]) # 987
常用操作方法
字符串常用的操作方法有 查找、修改和判断 三大类。
查找
所谓字符串查找方法即 :查找子串在字符串中的位置或出现的次数
find()
检测某个子串是否包含在这个字符串中,如果在返回这个子串开始位置下标,否则则返回-1
语法 :
字符串序列.find(子串,开始位置下标,结束位置下标)
注意 :开始位置和结束位置下标可以忽略,表示在整个字符串序列中查找;
开始和结束位置表示的是查找区间
快速体验 :
my_str = "hello world java and python and ..."
# find()
print(my_str.find("and")) # 17
print(my_str.find("a", 0, 13)) # -1 查找范围为 :[0,13)
index()
检测某个子串是否包含在这个字符串中,如果在返回这个子串开始位置下标,否则则报错
语法 :
字符串序列.index(子串,开始位置下标,结束位置下标)
注意 :开始位置和结束位置下标可以忽略,表示在整个字符串序列中查找;
开始和结束位置表示的是查找区间
快速体验
my_str = "hello world java and python and ..."
# # index()
print(my_str.index("and")) # 17
# print(my_str.index("a", 0, 13)) # 不存在会报错
rfind() 、rindex()
rfind() 和 find() 功能相同,但查找的方向是从右侧开始的
rindex() 和index() 功能相同,但查找的方向是从右侧开始的
my_str = "hello world java and python and ..."
# rfind()
print(my_str.rfind("and")) # 28
print(my_str.rfind("ands")) # -1,找不到返回 -1
# rindex()
print(my_str.rindex("and")) # 28
print(my_str.rindex("ands")) # 报错
count()
返回某个子串在字符串中出现的次数
语法 :
字符串序列.count(子串,开始位置下标,结束位置下标)
快速体验
my_str = "hello world java and python and ..."
# count()
print(my_str.count("and")) # 2
print(my_str.count("a")) # 4
print(my_str.count("a",3,15)) # 1
修改
字符串的修改,指的就是通过函数的形式修改字符串中的数据
replace() : 替换
语法 :
字符串序列.replace(旧子串,新子串,替换次数)
替换的次数如果查出子串出现的次数,则替换次数为该子串出现的次数
快速体验
my_str = "hello world java and python..."
print(my_str.replace("and","he")) # hello world java he python...
print(my_str.replace("a","he",1)) # hello world jheva and python...
# 替换次数如果超出了子串出现的次数,就表示将所有的子串都替换掉
print(my_str.replace("a","he",100)) # hello world jhevhe hend python...
split()
按照指定字符分割字符串,返回的数据是一个列表
语法:
字符串序列.split(分割字符,num)
注意 :num 表示的是分割字符出现的次数,即将来返回数据的个数为 num+1 个
快速体验
my_str = "hello world java and python..."
# split() 按照指定字符分割字符串
list1 = my_str.split(" ") # 通过空格分割字符串,得到的结果是列表
print(list1) # ['hello', 'world', 'java', 'and', 'python...']
join()
合并列表里的字符串,拼成一个大的字符串
语法
字符或子串.join(多字符串组成的序列)
快速体验
list2 = ["aa","bb","cc"]
new_list = "...".join(list2)
print(new_list) # aa...bb...cc
capitalize()
将字符串第一个字符转为大写
# capitalize()
str1 = "ABCDEFG"
str2 = str1.capitalize()
print(str2) # Abcdefg
注意 :capitalize() 函数转换后,只将字符串的第一个字母变为大写,其余字母小写
lower()
字符串中大写转小写
# lower()
str1 = "ABCDEFG"
str2 = str1.lower()
print(str2) # abcdefg
upper()
字符串小写转大写
# upper()
str1 = "asd"
str2 = str1.upper()
print(str2) # ASD
startswith()
检查字符串是否以指定的子串开头,是则返回 True ,否则返回 False
# startswith(子串[,开始位置下标,结束位置下标])
str1 = "asd"
new_str = str1.startswith("a")
print(new_str) # True
endswith()
检查字符串是否以指定的子串结尾
# endswith(子串[,开始位置下标,结束位置下标])
str1 = "asd"
new_str = str1.endswith("d")
print(new_str) # True
判断字符串方法
# isalpha() 字符串中全是字母,返回True,否则返回False
str1 = "adsadsa"
print(str1.isalpha()) # True
# isdigit() 字符串中全是数字,返回True,否则返回False
str2 = "123456"
print(str2.isdigit()) # True
# isalnum() 字符串中是数字或字母或是数字字母组合,返回True,否则返回False
str3 = "asdf123"
print(str3.isalnum()) # True
列表
列表的格式
[数据1,数据2,......]
列表中的常用操作
查找
下标
name_list = ['张三','李四','王五']
# 查询
print(name_list[0]) # 张三
print(name_list[1]) # 李四
print(name_list[2]) # 王五