目录
python,从0开始学一下,顺便记个笔记
不要问为什么选择python
问就是工作需要!!!
python起源
1989年,为了打发圣诞节假期,Gudio van Rossum吉多· 范罗苏姆(龟叔)决心开发一个新的解释程序(Python雏形)
1991年,第一个Python解释器诞生
Python这个名字,来自龟叔所挚爱的电视剧Monty Python’s Flying Circus
python特点
简单、易学、开发效率高、适用面广
python环境安装在另一篇中有讲解点这里跳转
第一个python程序
向世界说你好,应该是全世界,所有程序员入门编程语言时,都会选择的第一个程序。
让我们也延续这一份来自程序员之间的浪漫,学习如何使用Python,向世界说你好。
我们的Python代码非常简单
print(“Hello World!!!”)
向屏幕输出(显示)Hello World!!!
python不像C/C++等,必须要头文件,但使用一些库的时候还是要引用出来
打印字符串加单引号或双引号都可以,数字直接输出,不用引号,自动添加换行
若不需要换行时,可这样写:print(“hello”, end=‘’)
加上end=''就不会换行
制表符 \t 当使用空格无法对齐时,就可以使用制表符
字面量
在代码中,被写下来的固定的值,称之为字面量
字符串
python中,字符串需要用双引号 " " 括起来
被引号包围的都是字符串
注释
注释不是程序,不能被执行,只是对程序进行解释说明,让别人看懂程序的作用,能够大大增加程序的可读性
单行注释 # ,#右侧内容不会被执行;建议在使用注释时,在#后面加个空格
name = "张三" # 定义了一个值为张三的变量
多行注释:英文符号双引号 “”" “”"
"""
这里是多行注释
三个英文符号双引号
这里不会被程序执行
"""
变量
变量是在程序运行时,能储存计算结果或能表示值的抽象概念。简单的说,变量就是在程序运行时,记录数据用的
变量的特征
变量,从名字中可以看出,表示“量”是可变的。
所以,变量的特征就是,变量存储的数据,是可以发生改变的。
使用变量的目的
变量的目的是存储运行过程的数据,存储的目的是为了重复使用
print如何输出多份内容
print(内容1, 内容2...内容N) # 直接输出就行,中间加上逗号
数据类型
前期先从基础的开始
类型 | 描述 | 说明 |
---|---|---|
string | 字符串类型 | 用引号引起来的数据都是字符串 |
int | 整型(有符号) | 数字类型,存放整数 |
float | 浮点型(有符号) | 数字类型,存放小数 |
type()语句
用来验证数据类型
直接输出
用变量存储
str是string的缩写
变量有类型吗
我们通过type(变量)可以输出类型,这是查看变量的类型还是数据的类型?
查看的是:变量存储的数据的类型。因为,变量无类型,但是它存储的数据有。
所谓字符串变量,不是说变量是字符串,而是它存储了 字符串
字符串定义一般有单引号’内容’ 双引号 “内容” 还有三个双引号 “”“内容”“”
这里的三个双引号和注释类似,支持换行操作。使用变量接收它,它就是字符串,不使用变量接收它,就可以作为多行注释使用。
字符串的引号嵌套
单引号定义法,可以内含双引号
双引号定义法,可以内含单引号
可以使用转移字符 \ 来将引号解除效用,变成普通字符串
字符串拼接
如果我们有两个字符串字面量,可以将其拼接成一个字符串,通过加号 + 即可完成
name_boy = "立花泷"
name_girl = "宫水三叶"
print("你的名字" + name_boy + name_girl)
输出:你的名字立花泷宫水三叶
字符串格式化
拼接字符串时,如果变量太多,就会很麻烦,而且字符串和数字还不能拼接,那怎么办呢?
这里就可以通过字符串和变量来完成快速拼接
name_boy = "立花泷"
name_girl = "宫水三叶"
num = 2
name = "你的名字 %s %s %d" % (name_boy, name_girl, num)
print(name)
输出:你的名字 立花泷 宫水三叶 2
这里的%s
% 表示这个位置我要了
s 将变量变成字符串放入占位的地方
字符串无法和非字符串拼接,因为类型不一致,无法接上,就像接力赛一样,不是队友无法进行接力
多个变量占位,需要用括号将变量括起来,并按顺序填入
%s 将内容转换成字符串
%d 将内容转换成整数
%f 将内容转换成浮点型
这里是也可以通过%s来进行拼接数字,但是拼接的数字是自动转换为字符串类型的
字符串格式化-数字精度控制
我们可以使用辅助符号"m.n"来控制数据的宽度和精度
m 控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
n 控制小数点精度,要求是数字,会进行小数的四舍五入
%5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽
度。
%5.2f:表示将宽度控制为5,将小数点精度设置为2
小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,小数部分四舍五入为.35
%.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35
字符串格式化-快速写法
目前通过%符号占位已经很方便了,还能进行精度控制。
可是追求效率的Python,是否有更加优雅的方式解决问题呢?
答案是:有
通过语法:f"内容{变量}"的格式来快速格式化
name = "张三"
age = 100
birthday = 13.32
print(f"你的名字是{
name}, 年龄是{
age}, 生日是{
birthday}")
输出:你的名字是张三, 年龄是100, 生日是13.32
这种写法不会做精确控制
也不理会类型
适用于快速格式化字符串
字符串格式化-表达式格式化
表达格式化是比上面两种更简便的写法
所谓表达式:一条具有明确执行结果的代码语句
1+1, 2*2 这就是表达式,因为有具体的结果,结果是一个数字
或者常见的变量定义:
name = "张三" age = 11 + 11
等号右侧的都是表达式呢,因为它们有具体的结果,结果赋值给了等号左侧的变量。
直接格式化一个表达式:
print(f"22={22}")
print(“字符串在Python中的类型是:%s”% type(‘字符串’))
在无需使用变量进行数据存储的时候,可以直接格式化表达式,简化代码
类型转换
数据类型之间,在特定的场景下,是可以相互转换的,如字符串转数字、数字转字符串等
从文件中读取的数字,默认是字符串,我们需要转换成数字类型
后续在input()语句,默认结果是字符串,若需要数字也需要转换
将数字转换成字符串用以写出到外部系统
int(x) | 将x转换成一个整数 |
---|---|
float(x) | 将x转换成一个浮点数 |
str(x) | 将x转换为字符串 |
若是遇见无法转换的类型,比如字符串中有数字以外的类型,则无法转换为int类型,就会报错
浮点型转换整数会丢失小数点后的数字,也就是丢失精度
什么是标识符
在Python程序中,我们可以给很多东西起名字,比如:变量的名字
方法的名字类的名字,等等
这些名字,我们把它统一的称之为标识符,用来做内容的标识。
所以,标识符是用户在编程的时候所使用的一系列名字,用于给变量、类、方法等命名。
标识符命名规则
标识符命名中,只允许出现
英文、中文、数字、下划线_
这四类元素。
其余任何内容都不被允许。
这里不推荐使用中文
!!数字不能作为开头
大小写敏感
dog = "旺财"
Dog = "富贵"
一个字母的大小写是完全能够区分标识符的
不可使用关键字
Python中有一系列单词,称之为关键字关键字在Python中都有特定用途
这些关键字我们不可以使用它们作为标识符,会出问题
变量命名规范
学完了标识符(变量、类、方法)的命名规则后,在来学习标识符的命名规范。
变量名
类名
方法名
不同的标识符,有不同的规范
目前只接触到了:变量。所以,目前学习:变量的命名规范。
见名知意
明了:尽量做到,看到名字,就知道变量什么意思
简洁:在确保“明了”的前提下下,减少名字的长度
下划线命名法
多个单词组合的变量名,尽量使用下划线分隔
英文字母全小写
命名表变量中的英文字母,应全部小写
运算符
算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 两个对象相加 a+b 输出结果 n |
- | 减 | 得到两个数的差 |
* | 乘 | 两数相乘取得的结果 |
/ | 除 | b/a输出结果,除法计算 |
// | 取整除 | 返回商的整数部分 9//2 输出结果 4 |
% | 取余 | 返回余数 |
** | 指数 | a**b意为a的b次方 |
赋值运算符
等号 = 把的能耗右边的结果 赋给 左边的变量,如num=1+2*3,结果num的值为7
复合赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
+= | 加法赋值运算符 | 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 |
获取键盘输入:input函数
input函数对应print函数是从键盘获取输入
使用一个变量接收input语句获取的键盘输入数据
print("Who are you?")
name = input()
print("I am " + name)
这里还可以简化写法,可以在要求使用者输入内容前,输出提示内容
name = input("Who are you?")
print("I am " + name)
判断语句
进行逻辑判断,是生活中常见的行为。同样,在程序中,进行逻辑判断也是最为基础的功能。
判断在程序中广泛应用,如果没有它,这些功能都难以实现
比如网站登录、APP登录、景区验票、车牌识别等
判断是程序最基础、最核心的功能
布尔型和比较运算符
判断真和假,也就是说只有是或者否两种结果
python中常用的6重数据类型
布尔类型的字面量:
True表示真(是、肯定)
False表示假(否、否定)
定义变量存储布尔类型数据:
变量名称=布尔类型字面量
布尔类型不仅可以自行定义同时也可以通过计算的来
也就是使用比较运算符进行比较运算得到布尔类型的结果
比较运算符
布尔类型的数据,不仅可以通过定义得到,也可以通过比较运算符进行内容比较得到。
result = 10 > 5
print(f"10 > 5的结果是:{
result},类型是:{
type(result)}")
# 输出:10>5的结果是:Ture,类型是:<class 'bool'>
if判断语句
判断嘛,是从 如果→动作 的运动方式
比如说,如果小美喜欢我,明天我就去表白
程序中写法
# if 要判断的条件:
# 条件达成时, 要做的事
grade = 70
if grade <= 90:
print("考试结束")
print("成绩不及格")
print("请回中心打印成绩单")
这里判断条件就是要分数大于90
符合就执行后面的打印语句,不符合则直接跳过if和以下的这段打印代码
注意的点
判断语句的结果,必须是布尔类型True或FalseTrue会执行if内的代码语句
False则不会执行
归属于if断的代码语句块,需在前方填充4个空格缩进,也就是一个tab键
Python通过缩进判断代码块的归属关系,若前面没有空格或不符时则被编译器认为是if以外的代码,不会代入到判断语句内从而影响程序结果
判断条件后面的冒号不要忘记!
if else判断
当if无法满足判断需求的时候呢,else就冒出来了
这时候就变成了:如果→动作,否则→动作
比如说,如果小美喜欢我,明天我就去表白,否则我就去追求小新
程序中写法
grade = 70
if grade <= 90:
print("考试结束")
print("成绩不及格")
print("请回中心打印成绩单")
else:
print("考试结束")
print("成绩合格")
print("请回中心打印成绩单")
else后面不需要判断条件
这就是说,当你的判断条件满足时,就会执行,不满足时,就会 直接 执行另一个条件
和if一样,else也需要缩进四个空格
if elif else语句
这里是:如果1→动作,如果2→动作,如果N→动作,否则→动作
比如说,如果小美喜欢我,明天我就去表白,或者小甜喜欢我,明天我去表白,否则我就去追求小新
程序中写法
age = 16
height = 175
if age < 18: # 1
print("年龄太小了")
elif height < 180 # 2
print("有点矮,不合适")
else # 3
print("年龄或身高合格")
print("已加入该社团")
这段代码如果执行的话就会报错
因为没有加 ’ : ’
elif语句可以写很多个,用来判断各种可能发生的事件
这段代码执行时,若1符合判断条件,进行输出后,则不会在执行2和3
1不满足但满足2时,执行2,不会执行3,1和2都不满足时,则进入else,也就是3
注意点:这里还是缩进,千万不要忘了!
tap
input语句也是可以写入判断中的,用来节省代码量
例
if int(input("请输入你的年龄:")) < 18:
print("年龄太小")
else:
print("年龄合适")
判断语句嵌套
在满足一项要求的前提下进行另一条要求的判断
这里就显出了缩进的关键性,通过缩进满足层次关系
if 条件1:
满足条件1 做的事情1
满足条件1 做的事情2
if条件2:
满足条件2 做的事情1
满足条件2 做的事情2
这种情况下可以自由组合if elif else,完成特定的需求
循环语句
循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。
循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础:
像:循环广告牌、批量修图、视频轮播、音乐轮播、图片轮播、大喇叭喊话、动态壁纸等
循环是程序最基础、最核心的功能
举个例子,比如说:每天都像小美表白,知道成功为止
程序中,只要条件满足,就会无限循环执行
while循环
while 条件:
满足时最的事情1
满足时最的事情2
满足时最的事情3
满足时最的事情N
当第N次的时候,咱不说为啥,小美同意了,这时候跳出循环,循环结束
n = 0
while n = 101:
print("小美,表白")
n += 1
print("小美终于接受了你的表白")
这是一个美好的假设,从第0次开始,n每次加以用以计数,当程序执行到101次的时候,小美同意了;
但现实大多数都是:while True ……
1.while的条件需得到布尔类型,True表示继续循环,False表示结束循环
2.需要设置循环终止的条件,如i+= 1配合 i <100,就能确保100次后停止,否则将无限循环
3.空格缩进和if判断一样,都需要设置
while循环嵌套
while条件1:
条件1满足时﹐做的事情1
条件1满足时﹐做的事情2
条件1满足时﹐做的事情3
条件1满足时﹐做的事情N
while条件2:
条件2满足时,做的事情1
条件2满足时﹐做的事情2
条件2满足时﹐做的事情3
条件2满足时﹐做的事情N
这里同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进
基于空格缩进来决定层次关系
注意条件的设置,避免出现无限循环(除非真的需要无限循环)
for循环
除了while循环语句外,Python同样提供了for循环语句。两者能完成的功能基本差不多,但仍有一些区别:
. while循环的循环条件是自定义的,自行控制循环条件
. for循环是一种”轮询”机制,是对一批内容进行”逐个处理”
生活中的for循环:
洗碗,一个一个洗净
剥大蒜,一个一个剥
送快递,一个一个送
吃瓜子,一个一个吃
等都是一个一个逐渐完成
程序中
for 临时变量 in 待处理数据集:
循环条件满足时执行的代码
从待处理数据集中,逐个取出数据赋值给临时变量
name = "asdfghjkl"
for q in name:
print(q)
运行结果:
a
s
d
f
g
h
j
k
l
可以看出,for循环是将字符串的内容:依次取出
所以for循环也叫做:遍历循环
同while循环不同,for循环是无法定义循环条件的。
只能从被处理的数据集中,依次取出内容进行处理。
所以,理论上讲,Python的for循环无法构建无限循环(被处理的数据集不可能无限大)
range语句
for l临时变量in待处理数据集(可迭代对象):
循环满足条件时执行的代码
语法中的:待处理数据集,严格来说,称之为:可迭代类型
可迭代类型指,其内容可以一个个依次取出的一种类型,包括:
字符串、列表、元组等
for循环语句,本质上是遍历:可迭代对象
这里用一个简单的数字序列举例(可迭代的类型的一种)
语法1:
range(num)
获取—个从0开始,到num结束的数字序列(不含num本身)如range(5)取得的数据是:[0,1,2,3,4]
语法2:
range(num1,num2)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
如,range(5,10)取得的数据是:[5,6,7,8,9]
语法3:
range(num1,num2,step)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
数字之间的步长以step为准(step默认为1)
如,range(5,10,2)取得的数据是:[5,7,9]
# for循环遍历range序列
for i in range(5)
print(i)
输出:
0
1
2
3
4
练习:
算出1-100中有多少个偶数出现(不包含100)
num = 0
for i in range(1, 100):
if i % 2 == 0:
num += 1
print("偶数有%d个" % num) # 49
for循环变量作用域
for 临时变量 in 待处理数据集:
循环满足条件时执行的代码
临时变量:
如果在for循环外部访问临时变量:在编程规范上,作用范围(作用域),只限定在for循环内部实际上是可以访问到的,但是不允许、不建议这么做的,因为没有意义
如果实在需要在循环外访问循环内的临时变量,可以在循环外预先定义
i = 0
for i in range(5):
print(i)
print(i)
如上面代码,每一次循环的时候,都会将取出的值赋予i变量,由于i变量是在循环之前(外)定义的,在循环外访问i变量是合理的、允许的
for循环嵌套
就像在操场跑圈,需要跑10圈,每次跑完一圈之后都要做5个标记
for i in range(1, 11):
print(f"这是第{
i}圈,加油")
for x in range(1, 6):
print(x)
print("终于跑完了,真棒")
这里的缩进也是和while的一样,要多注意
输出:
这是第1圈,加油
1
2
3
4
5
这是第2圈,加油
1
…
5
这是第10圈,加油
1
2
3
4
5
终于跑完了,真棒
循环中断
continue关键字:中断本次循环,直接进入下一次循环
continue可用于:for循环和while循环,效果一致
就像每天都和小美表白,送一日三餐,直到成功
每天送餐的时候看小美脸色,今天不高兴就不送了,明天继续
通过代码实现小美心情
for i in range(1,101):
print(f"追求小美的第{
i}天,坚持......")
print("给小美送早饭,比心")
print("给小美送午饭,比心")
if input(f"今天小美的心情好像(Q好心情,1坏心情)") == '1':
print("小美心情不好,晚饭不送了,撤退......")
print()
continue
print("给小美送晚饭,送小美回家并表白")
print()
continue只能控制它所在的循环临时中断
break关键字
break关键字用于:直接结束所在循环
break可以用于for和while循环,效果一致
每天都去向小美表白,送一日三餐,直到成功
某天小美说,不要再打扰我了,以后就不要缠着她了
代码实现小美心情
for i in range(1,101):
print(f"追求小美的第{
i}天,坚持......")
print("给小美送早饭,比心")
print("给小美送午饭,比心")
if input(f"如果你是小美,请告诉我你是否明确拒绝(0再观察观察,1不合适拒绝)") == '1':
print("小美拒绝我了,以后不追求小美了。T.T")
break
print("给小美送晚饭,送小美回家并表白")
print()
函数
函数是组织好的,可重复使用的,用来实现特定功能的代码段
使用函数的好处是:
将功能封装在函数内,可供随时随地重复利用
提高代码的复用性,减少重复代码,提高开发效率
函数的定义
def 函数名(传入参数):
函数体
return 返回值
函数的调用:
函数名(参数)
要注意:
参数如果不需要,可以省略
返回值如果不需要,可以省略
函数必须先定义后使用
函数的传入参数
传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据
def add():
result = 1 + 2
print(f"1+2的结果是:{
result}")
该函数的功能非常局限,只能计算1+2
有没有可以实现计算机去计算用户指定的两个数字呢?
有!使用函数传参功能,即可实现
函数传入参数 - 传参定义
基于函数的定义语法:
def 函数名(传入参数):
函数体
return 返回值
代码写法:
# 定义函数
def add(x, y<