1.常量与表达式
print(1) #这里的1就是一个常量
print(1+2+3) #这里的1+2+3就是一个表达式
常量与表达式很简单,用的也不多,了解即可
2.变量和数据类型
变量就是用来保存数据的,如果一个数据我们要经常用到,创建一个变量把这个数据保存起来,在后面使用的时候就会很方便.
创建变量
#语法:
变量名 = 数据
这里的 = 不是 数学中比较相等,而是赋值运算
变量的命名规则:
变量名必须由数字,字母和下划线构成 不能是表达式
不能以数字开头
不能以关键字作为变量名
数据类型
变量的类型:为了对不同的变量进行区分
Python中的数据类型只有整型(int),浮点型(float)和字符串类型
需要注意的是:
Python中的int的取值范围是无穷的
Python中的float是双精度浮点数
字符串类型要把数据用单引号或者双引号包起来
字符串的类型是可以拼接的,就是把一个字符串拼接到最后一个字符串的末尾,从而得到一个更大的字符串 字符串使用 + 进行拼接
动态类型
动态类型的意思是python中的数据类型是可以变化的
a = 1
print(type(a))
# 输出结果:<class 'int'>
a = 1.5
print(type(a))
# 输出结果:<class 'float'>
a = "hello world"
print(type(a))
# 输出结果:<class 'str'>
数据类型的转换
数据类型转换这个在平时使用的也是非常多的
数据类型的转换的语法为:
# 要转换为的数据类型(变量名)
num = 1
str(num)
str_num = str(num)
# 对于转换后的数据类型建议用个变量接收一下
print(type(num)) # 输出 <class 'int'>
print(type(str_num)) # 输出 <class 'str'>
print(str_num) # 输出 1
所以要注意 数据类型的转换不会更改最初的变量类型,而是得到一个修改数据类型后的数据,如果要使用这个数据需要用另外一个变量进行接受
整数 浮点数 字符串之间可以相互转换,但是不能随便转换
需要注意:
1.任何数据类型都可以转换为字符串
2.字符串要想转换为数字,那么这个字符串中必须只有数字
3.浮点数转整数,会丢失到小数部分
3.注释
注释一边起到 对代码的进行解释说明的作用
代码的注释一共有三种方式
python中的注释 | 符号 |
行注释 | # |
文档字符串 | “”“注释的内容”""或’’‘注释的内容’’(三个双/单引号作为开头结尾,不能混用) |
4.字符串
字符串的定义方式
字符串的定义方式有三种:
# 字符串的定义方式
str1 = 'python'
str2 = "python"
str3 = """python"""
其中str3这个定义方式和注释的写法是一样的,当有变量接受时,它就是个字符串,如果没有则是注释
如果想要的定义字符串里本身包含单引号或双引号,要怎么进行解决
有三种方法:
1.单引号定义,字符串可以包换双引号
2.双引号定义,字符串可以包换单引号
3.使用 \ (转义字符)
示例:
str1 = "'python'"
str2 = '"python"'
str3 = "\"python"
print(str1)
print(str2)
print(str3)
# 输出结果:
# 'python'
# "python"
# "python
字符串的拼接
字符串的拼接就是将两个及以上的字符串拼接成为一个更大的字符串,字符串的拼接要使用 +
示例:
print("人生苦短," + "我学python")
str = "python"
print("人生苦短,"+"我学"+str)
# 输出结果:
# 人生苦短,我学python
# 人生苦短,我学python
需要注意的是字符串的拼接,只能是字符串类型的数据进行拼接,而不能和非字符串类型的数据进行拼接
字符串的格式化①
为了解决字符串无法和非字符串类型进行拼接这个问题,这个时候就可以使用字符串的格式化
符号表示 | 描述 |
%s | 将内容转换为字符串,放入占位的位置 |
%d | 将内容转换为整数,放入占位的位置 |
%f | 将内容转换为浮点型,放入占位的位置 |
例如:%s
% 是指我要占位
s 是指将变量转化为字符串放入占位的地方
示例如下:
str1 = "python"
print("我要学%s" %str1)
str2 = 2023
print("现在是%s年,我要学%s" % (str2,str1))
# 输出结果:
# 我要学python
# 现在是2023年,我要学python
注意:当只有多个字符串使用占位符进行拼接时,需要使用括号将变量括起来,变量与变量之间用逗号隔开
字符串格式化的精度控制
精度控制主要是针对数字,符号表示为 m.n
m: 空置宽度,设置的宽度小于数字本身,则不生效(很少用)
n: 控制小数点精度,要求是数字,进行四舍五入
示例
a = 11
b = 123456
c = 12.345
print("设置数字宽度为5,a为:%5d" %a)
print("设置数字宽度为5,b为:%5d" %b)
print("设置宽度为6,小数精度为2位,c为:%7.2f" %c)
print("宽度不限制,小数精度为2位,c为:%.2f" %c)
# 输出结果:
# 设置数字宽度为5,a为: 11
# 设置数字宽度为5,b为:123456
# 设置宽度为6,小数精度为2位,c为: 12.35
# 宽度不限制,小数精度为2位,c为:12.35
# 注: .也算一个宽度
上面示例的输出结果里面有空格,显示的效果不是很明显,因此建议使用编译器尝试运行一下
字符串的格式化②
虽然使用占位符能够拼接字符串,还能精度控制,但是python还为我们提供了另外一种拼接字符串的方式
语法格式:f"内容{变量}"
这里的f就是format ,格式化的意思
示例:
num1 = "python"
print(f"人生苦短,我学{num1}")
num2 = 100
num3 = 41.9
print(f"张三有{num2}元,网购花了{num3}元")
# 输出结果为:
# 人生苦短,我学python
# 张三有100元,网购花了41.9元
这种格式化字符串的方式,什么类型都可以进行格式化,但不会对精度进行控制
对表达式进行格式化
对代码中只用到一次的变量,我们就不用定义变量进行赋值了,而是直接使用表达式进行表示
示例:
print("1*1 = %d" % (1*1))
print(f"1*1 = {1*1}")
print("浮点数在python中的类型名是: %s" % type(1.23))
# 输出结果:
# 1*1 = 1
# 1*1 = 1
# 浮点数在python中的类型名是: <class 'float'>
5.从控制台输入(input)
input从键盘读入输入的内容,可以使用变量对输入的内容进行接收
需要注意一点,input输入的语句接收的内容都是字符串类型,即使你输入的整数,浮点数,如果想要得到整数,浮点数类型的数据,则需要数据类型转换
num1 = input("你的兴趣爱好是:")
print(num1)
num2 = input()
num3 = input()
print(f"num1的数据类型是:{type(num1)}")
print(f"num2的数据类型是:{type(num2)}")
print(f"num3的数据类型是:{type(num3)}")
# 输出结果:
# 你的兴趣爱好是:唱跳rap篮球 (用户进行输入)
# 唱跳rap篮球
# 15 (用户进行输入)
# 12.54 (用户进行输入)
# num1的数据类型是:<class 'str'>
# num2的数据类型是:<class 'str'>
# num3的数据类型是:<class 'str'>
6.运算符
算术运算符
运算符 | 描述 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
// | 整除 |
% | 取余 |
** | 指数(次方) |
算术运算符中和数学中的运算符是差不多的,但是有一点需要注意: / 这个运算符,在其它语言中例如C/Java 中 这个 / 是整数的意思,但是在python中不一样,python中的这个 / 和数学上的是一样的,例如 5/2在python中的结果就是 2.5 得到的结果是一个浮点数
赋值运算符
赋值运算符就是 “=” 就是将一个数据赋值给另一个变量
其中,还有一些复合赋值运算符
运算符 | 实例 |
+= | b+=a 等价于 b=b+a |
-= | b-=a 等价于 b=b-a |
*= | b*=a 等价于 b=b*a |
/= | b/=a 等价于 b=b/a |
%= | b%=a 等价于 b=b%a |
**= | b**=a 等价于 b=b**a |
//= | b//=a 等价于 b=b//a |
布尔类型和比较运算符
布尔类型用于表示 真和假
比较运算符用于计算 真和假
其实布尔类型属于数字类型,但取值只有两个:True(真)和False(假) 在数字中对应的就是1和0
下面来看比较运算符 其实很好理解,看一下代码及输出结果:
ret1 = 1 < 2
ret2 = 1 > 2
print(ret1)
print(ret2)
print(f"ret1的类型是: {type(ret1)}")
print(f"ret2的类型是: {type(ret2)}")
# 输出结果:
# True
# False
# ret1的类型是: <class 'bool'>
# ret2的类型是: <class 'bool'>
这个类似与数学中判断命题真假,真就是True 假就是False
比较运算符有以下这些:
运算符 | 描述 |
== | 判断内容是否相等 |
!= | 判断内容是否不相等 |
> | 判断大于号左边的值是否大于右边 |
< | 判断小于号左边的值是否小于右边 |
>= | 判断大于号左边的值是否大于等于右边 |
<= | 判断小于号左边的值是否小于等于右边 |
7.条件语句
布尔类型和比较运算符学习条件语句的基础
if语句
# 语法格式:
if 判断条件:
如果为True,执行代码
先看代码:
a = 5
b = 7
print(f"a = {a}")
print(f"b = {b}")
if a < b:
print("5 < 7")
print("5 < 7为True,所以输出")
if a > b:
print("5 > 7")
print("5 > 7为False,所以不输出")
print("不受条件控制的影响")
# 输出结果
# a = 5
# b = 7
# 5 < 7
# 5 < 7为True,所以输出
# 不受条件控制的影响
其实语法格式很简单,但是有一些点需要注意:
判断条件的结果必须为True或者False
Python中有着严格的缩进,if语句与if语句为真时要执行的代码是不对齐的,if语句为真要执行的代码前面有着4个空格
if语句中可以写多条语句,但是只有在条件为True时 才会执行
不要忘记判断条件后面的 “冒号”
if else语句
# 语法格式
if 判断语句:
执行语句
else:
执行语句
先看代码:
a = 5
b = 7
if a < b:
print("a < b")
if a >= b:
print("a >= b")
if a < b:
print("a < b")
else:
print("a >= b")
# 输出结果
# a < b
# a < b
else 不需要条件判断语句,只要if条件不满足就回去执行else里面的语句
else 的代码块也要进行缩进
if elif else语句
学习过其它编程语言的同学,应该知道判断语句应该是 if else if和else,elif其实就是else if的缩写,但是在python中没有else if
语法格式如下:
if 判断条件:
条件满足执行代码
elif 判断条件:
条件满足执行代码
elif 判断条件:
条件满足执行代码
...
else:
条件满足执行代码 # 这里的条件满足 是指else上面的判断语句均不满足
elif 可以写多个
判断条件时是依次执行的,只要有一个条件满足 后面的就不会执行
注意缩进
来看个案例:
val = int(input("请输入成绩: "))
if val < 60:
print("成绩评定为: 不及格")
elif val < 70:
print("成绩评定为: 及格")
elif val < 85:
print("成绩评定为: 良好")
else:
print("成绩评定为: 优秀")
# 输出结果:
# 请输入成绩: 80
# 成绩评定为: 良好
注意: 上面的 val < 70 其实可以理解为 60 <= val <= 70 因为如果val < 60的话就直接 输出:成绩评定为: 不及格 也不会去对后面的条件进行判断了 能进行 val < 70这个条件判断 说明val一定是大于等于60的. val<85同上
还可以将input语句直接写在判断条件中,但是不建议这样写,可读性变差了
判断语句的嵌套
判断语句是可以嵌套的,比如在一个if else语句中再塞一个if elif else语句也都是没问题的.不过最好不要嵌套太多的条件判断语句,可读性不好. 尽量还是要追求简洁
8.循环
循环在我们平时生活中也是很常见的,例如:音乐的轮播,循环广告牌等
while循环
循环语句首先会对条件进行判断,如果条件为真,就会执行while语句中的代码,每次执行完就会重新判断条件是否为真(True),如果为真就继续为真,如果为假(False)退出循环
设置好循环条件,如果条件一直为真,就会一直执行while里面的代码,不会退出循环
注意缩进
示例:
# 循环输出1~100之间的所有奇数
i = 1
while i < 100:
print(i)
i += 2
# 输出结果:
# 1
# 3
# ...
# 97
# 99
在i自增到101的时候,不满足条件 i < 99 了,因此退出循环,程序结束
因此,如果在代码的最后加一个输出i的值的语句,输出的结果就是101
循环语句的嵌套
循环语句和条件判断语句一样,可以嵌套
接下来通过示例打印九九惩罚口诀表讲解如何嵌套
# 打印九九乘法口诀表
i = 1
while i < 10:
j = i
while j < 10:
print(f"{i} * {j} = {i*j}")
j += 1
i += 1
注意:
这里的i=j 和 j+=1都是在循环1里的,而不是循环2
循环1控制i从1到9
循环2控制j从i到9
for循环
python中的for循环和其它语言中的for循环还不太一样,虽然和while循环功能是差不多的,但还有一些区别:
while循环的循环条件是可以自定义的
for循环一种"轮询"机制,对一批内容追个处理
# 语法
for 临时变量 in 临时处理数据集:
条件为真时执行代码
条件为假退出循环
示例:
str1 = "python"
for ch in str1:
# 使用ch这个临时变量,逐个取出str1中的每一个字符
print(ch)
# 输出:
# p
# y
# t
# h
# o
# n
for循环无法定义循环条件,只能逐个去除数据进行处理
注意缩进问题
range语句
# 语法:
range(num)
# 获取一个从0开始,到num(不包括num)结束的数字序列
range(num1,num2)
# 获得一个从num1开始到num2(不包括num2)的数字序列
range(num1,num2,step)
# 获得一个从num1开始到num2(不包括num2)的数字序列
# 但是每个数字之间的步长为step
示例1:
for x in range(3):
print(x)
# 输出结果:
# 0
# 1
# 2
示例2:
for x in range(2,5):
print(x)
# 输出结果:
# 2
# 3
# 4
示例3:
for x in range(1,10,3):
print(x)
# 输出结果:
# 1
# 4
# 7
特别提醒:如果要用区间的话,在计算机中基本上都是左闭右开的区间,这一点需要注意
continue和break
continue的作用:中断本次循环,直接进入下一次循环
continue用于:for循环和while循环,效果时相同的
示例:
# 输出0~9之间的所有奇数
for x in range(10):
if x % 2 == 0:
continue
print(x)
# 输出结果:
# 1
# 3
# 5
# 7
# 9
用x对2取余,如果等于0说明是偶数,就中断本次循环,直接进入下一个循环,以此来达到输出0~9之间的所有奇数的效果
9.函数
函数是什么
函数是 组织好的,可重复使用的具有某种功能的特定代码段
使用函数的好处:
将功能封装好在函数内,可随时且重复的去调用
提高代码的复用性,提高效率
函数的定义与调用
# 函数定义的语法
def 函数名(形参..):
函数体 # 也就是函数要实现的功能
return 返回值
# 函数的调用
函数名()
# 如果有参数要传参
# 如果有返回值可以用变量进行接受返回值
参数和返回值可以省略
函数必须先定义再使用
示例:
def func():
print("hello python")
func()
# 输出结果:
# hello python
函数的传入参数
刚才介绍了函数没有参数的情况,现在说一下有参数的情况
示例:
def add(x, y):
print(f"{x}+{y}={x+y}")
add(2, 5)
函数定义时的参数叫形式参数(形参),参数之间要使用逗号隔开
函数调用时传的2和5这种的叫实际参数(实参),也就是函数调用时真正使用的参数,按照顺序进行传入参数,参数之间使用逗号隔开
形参的数量是没有限制的
函数的返回值
之前的求两数之和的示例是直接输出的,没有返回值.
如果我想要得到两个之和就要使用函数的返回值了
# 使用方法:
def 函数名(形参..):
函数体 # 也就是函数要实现的功能
return 返回值
变量 = 函数名(形参..)
示例:
def add(x, y):
return x + y
ret = add(2, 3)
print(ret)
# 输出:
# 5
函数在执行完return语句后,如果后面还有语句的话,那么后面是不会执行的
None类型
如果函数没有写return语句,那么函数的返回值就是None
None就是空的,没有意义的意思
示例:
def func():
print("hello python")
ret = func()
print(f"无返回值的函数,返回的值为:{ret}")
print(f"无返回值的的函数,返回值的数据类型为:{type(ret)}")
# 输出结果
# hello python
# 无返回值的函数,返回的值为:None
# 无返回值的的函数,返回值的数据类型为:<class 'NoneType'>
函数的嵌套调用
函数也是可以嵌套调用的,就是在一个函数中调用另外一个函数
示例:
def fun2():
print(2)
def func1():
print(1)
fun2()
func1()
# 输出结果:
# 1
# 2
变量在函数中的作用域
变量主要分为两类:全局变量和局部变量
局部变量是 在函数体内部定义一个变量,这个变量只在函数体内部生效
局部变量的作用:用于保存变量,代码执行完后临时变量就销毁了
示例:
def func():
num = 12
print(num)
print(num)
# 这么写会报错
# 因此num的作用域只在函数体内部
全局变量是 在函数体内外都能生效的变量,定义在函数外即可
示例2:
num = 1
def func1():
print(num)
def func2():
num = 12
print(num)
func1()
func2()
print(num)
# 输出结果:
# 1
# 12
# 1
局部变量的优先级大于全局变量
因为fun2里的num是局部变量,局部优先,因此会输出12,而且不会改变外面全局变量num的值
如果要在函数体内部改变全局变量的值,则需要使用global关键字
示例:
num = 1
def func():
global num
num = 12
print(num)
func()
print(num)
# 输出结果:
# 12
# 12
global关键字的作用:将函数内部声明的变量变为全局变量