Python基础学习笔记(2)运算与函数
文章目录
前言
运算与函数的学习
一、数学计算
Python 的整数是和字符串不同的类型,就是直接的数字,不要用引号包裹,否则就成了字符串,不能用于数学计算。
Python的普通运算有如1+2-3/4*5,数学运算 表示幂次方,如2的三次方就是23。
更复杂的运算就要导入专门的数学库,math是一个专门的数学库,里面有很多数学函数,如sin,cos,tan,log等等,你可以把每个函数库想象成一个工具箱,里面的每一个函数都是一个工具,负责一个功能。比如像我们熟悉的print,它也是函数,负责提供展示或输出的功能,但使用 print 不需要你先首先导入函数库,因为它太常用了, Python 直接帮你默认放在里面了。默认就有的函数叫内置函数,而 Matt 是一个专门提供数学运算函数的库,导入它的方法是在文件最开始一行写 import math,比如下面的运算。
import math #math是一个专门的数学库,里面有很多数学函数,如sin,cos,tan,log等等
#运算就是math.函数名(参数)
result=math.log2(8)#求2的几次方等于8
print(result)
3.0
前面的的 math.是不能省略的,因为这个函数是属于 math 库里面的。
举例,比如我们要求一个一元二次方程求根公式的计算器。
import math
a=-1
b=-2
c=3 # 三个参数赋值也可以写成a,b,c=-1,-2,3,只要变量和值的个数相等就可以。
delta=b**2-4*a*c
sqrt_delta=math.sqrt(delta)#sqrt表示开方
x1=(-b+sqrt_delta)/(2*a)
x2=(-b-sqrt_delta)/(2*a)
print(x1,x2)
-3.0 1.0
三个参数赋值也可以写成a,b,c=-1,-2,3,只要变量和值的个数相等就可以。
二、Python的数据类型
变量的类型有字符串,整数,浮点数,布尔值,列表,元组,字典,集合等等
- 字符串 如’hello’[3]#字符串是有序的,可以通过下标来访问,下标从0开始,所以会返回l。
- 整数是int,浮点数是float
- 布尔类型有两个值,True和False,这里要注意T和F都要大写
- 空值是None,如果一个变量的值是None,说明它是空的 如my_name=None
- 如果你不确定一个变量是什么类型,可以用type()函数来查看如
print(type('hello'))#<class 'str'>表示字符串类型
<class 'str'>
一些简单的应用
s='hello world!'
print len(s)#求字符串的长度
#通过索引获取单个字符
print(s[0])#获取h
print(s[len(s)-3])#获取r
12 因为空格和!都各占一个长度
h
r
t=True
f=False
n=None
print(type(t))#<class 'bool'>布尔类型
print(type(n))#<class 'NoneType'>空值类型
<class 'bool'>
<class 'NoneType'>
三、Python的交互。
1.Python input
Python 的 input 函数可以用来从用户那里获取输入。它的用法是 input ()。
要注意的是, input 一律返回字符串,即使你输入的是数字,它也会当成字符串来看待。
要把字符串转换成其他类型,可以用int()函数,float()函数,bool()函数,比如int,int(“666”)返回的是数字666而不是字符串,函数可以把字符串转换成整数,float可以把字符串转换成浮点数,bool可以把字符串转换成布尔值,str可以把其他类型转换成字符串。
user_name=input("请输入你的名字")#这里输入韩梅梅
print("知道了,你的名字是"+user_name)#打印input函数的内容
user_age=input("请输入你的年龄")#这里输入31
user_age_after_10_years=int(user_age)+10
print (f'10年后你的年龄是{user_age_after_10_years}')#f字符串是格式化的字符串,但可读性更好,更简洁,不需要用+号连接,直接用{}括起来,里面写变量名
print('你十年后的年龄是'+str(user_age_after_10_years))#str函数可以把其他类型转换成字符串
知道了,你的名字是韩梅梅
10年后你的年龄是41
你十年后的年龄是41
简单做个BMI计算器。BMI=体重(kg)/身高(m)的平方
weight=float(input('请输入你的体重(kg)'))#输入62 因为输入的都是字符串。所以要用float转成浮点数
high=float(input('请输入你的身高(m)'))#输入1.6 因为输入的都是字符串。所以要用float转成浮点数再进行计算。
bmi=weight/(high**2)
print(f'你的BMI指数是{bmi}') #f字符串是格式化的字符串,但可读性更好,更简洁,不需要用+号连接,直接用{}括起来,里面写变量名
你的BMI指数是26.953124999999996
2.条件判断
1.比较运算符:
> < >= <= == !=
2.条件判断
if[条件]:
[执行语句]
[执行语句]
else:
[执行语句]
需要注意的是,条件后面还有一个冒号,表示条件结束,下方是条件为真实需要执行的语句,这个语句前面需要有缩进,建议缩进为 4 个空格语句,也可以为多个。所有 if 下方前面有缩进的语句都会被看成条件为真实要执行的内容。如果你希望条件为假时,什么都不做,条件语句到这里就可以结束了。但如果你想在条件为假时执行另外一些语句,那么就跟上 else 冒号下方为条件为假时要执行的语句。
语句可以不止一句,但每行前面都要有缩进,因为Python会根据缩进来判断这行到底是 if 管的部分还是 else 管的部分,还是不属于这一整段条件语句。
#条件判断
#比较运算符 > < >= <= == != if[条件]: 条件成立执行的代码块 else:条件不成立执行的代码块
mood_index=input('请输入你今天的心情指数(0-100)')#这里输入30
if int(mood_index)>80:
print('今天心情很好')
print('haha') #注意这里的缩进
else:
print('今天心情不好')
今天心情不好
#条件判断
#比较运算符 > < >= <= == != if[条件]: 条件成立执行的代码块 else:条件不成立执行的代码块
mood_index=input('请输入你今天的心情指数(0-100)')#这里输入30
if int(mood_index)>80:
print('今天心情很好')
print('haha') #注意这里的缩进,这句没缩进,说明条件判断结束了。
else:
print('今天心情不好')
报错
*> if那里没缩进,说明条件判断结束了。但是下面还有else,但是因为缩进的原因上面的if判断已经结束了,因为else不可以独立于if存在,所以这里的print报错,改正后代码如下。
if int(mood_index)>80:
print('今天心情很好')
print('haha')
else:
print('今天心情不好')
今天心情不好
3.嵌套条件语句
if[条件—]:
if [条件二]:
[语句A]
如果要下方这个语句A被执行,首先需要满足条件一为真,否则根本不可能执行到这个条件二的判断。
其次它还要满足条件 2 也为真,不然也不会被执行。
else:
[语句B]
那这下方的语句B也是首先必须满足条件A才有可能进入条件二判断,条件二为假才会执行。
所以 else 下方的语句被执行嵌套时,更需要注意缩进,缩进一般 4个空格,属于该 if
或 else 下方的语句都会比那个 if 或 else 再多出 4 个空格,Python会根据缩进判断属于哪个条件分支。
else:
[语句C]
针对条件一,我们也可以配一个else,这个语句是否执行就只取决于条件一,只要条件一为假就会被执行。
具体例子是
mood_index=input('请输入你今天的心情指数(0-100)')#这里输入77
if int(mood_index)<60:# :在python中是一个语法,表示下面是一个代码块
print('今天心情不好')
else:
if 60<int(mood_index)<80:
print('心情不好不坏')
else:
print('心情还不错')#python是通过缩进来判断代码块的,所以缩进很重要 比如第二个else是和第二个if同级的,所以要这个if对齐
心情不好不坏
4.多条件判断
if [条件一]:
[语句A]
elif [条件二]:
[语句B]
elif [条件三]:
[语句c]
else:
[语句D]
由于 Python 是从上往下执行,它只会执行第一个满足条件的语句,比如如果条件 2 和条件 3 同时满足排档,也只会执行 条件 2 那行下方的语句,因为一旦进入那个分支,就不会再看同一层级下的其他条件判断了。
具体例子是,结合多条件判断丰富一下之前写的 BMI 计算器。BMI=体重(kg)/身高(m)的平方
偏瘦:BMI<=18.5 正常:18.5<BMI<=25 偏胖:25<BMI<=30 肥胖:BMI>30
weight=float(input('请输入你的体重(kg)')) #这里输入96.2
high=float(input('请输入你的身高(m)'))#这输入1.78
bmi=weight/(high**2)
print(f'你的BMI指数是{bmi}')
if bmi<18.5:
print('体重过轻')
elif 18.5<=bmi<24:
print('正常体重')
elif 24<=bmi<28:
print('超重')
elif 28<=bmi<32:
print('肥胖')
你的BMI指数是30.362327988890293
肥胖
5.复杂逻辑运算
逻辑运算符 and,or ,not。
and表示且,比如 x 大于 5 and x 小于10,就是 x 大于 5 并且 x 小于10。
or表示或, 比如 x 大于 5 or x 小于 10 就是 x 大于5,或者 x 小于10
not表示非,比如not x 大于 5 就是 x 不大于5。
逻辑运算符的优先级高于比较运算符,逻辑运算优先级not>and>or,当然可以用括号来改变优先级。
举例 ,一个月内主动做家务次数超过10次 2.一个月内发红包次数超过1次 3.一个月内陪逛街次数超过4次 4.一个月内没有任何惹ta生气的行为出现 则可以买switch.
if (home_work>10 and red_packet>1 and company>4 and not angry):
print('可以买switch')
else:print('不能买switch')
6.Python列表
列表 用[]来表示,列表中的元素可以是任意类型,列表中的元素可以是重复的,如shopping_list=[‘apple’,‘banana’,‘orange’] 用逗号隔开。
- 如要往定义好的列表中添加元素,可以用append()方法,方法是针对对象的函数,用对象.方法名(参数)来调用,比如shopping_list.append(‘pear’)就是在列表shopping_list中添加一个元素pear
- 如要删除列表中的元素,可以用remove()方法,如shopping_list.remove(‘apple’)就是删除列表中的apple
- python中的列表可以放不同类型的元素,如shopping_list=[‘apple’,1,True],但是不推荐,因为不好维护
- 如要修改列表中的元素,可以用下标来修改,如shopping_list[0]='pear’就是把列表中的第一个元素改成pear
下面是实例:
shopping_list=[]#建立一个空表
shopping_list.append('apple')#添加字符串苹果
shopping_list.append('banana')#添加香蕉
shopping_list.append('orange')#桔子
print (shopping_list)#打印列表
shopping_list.remove('apple')#删除苹果
print (shopping_list)#打印列表
print(len(shopping_list))#求列表的长度
print(shopping_list[0])#打印列表中的第一个元素
shopping_list[0]='pear'#将列表第一个元素改成梨
print(shopping_list)
['apple', 'orange']
['orange']
1
orange
['pear']
第二个例子
price_list=[20,33,11,22,1,54]
max_price=max(price_list)#求列表中的最大值
min_price=min(price_list)#求列表中的最小值
sorted_price=sorted(price_list)#对列表进行排序
print(max_price,min_price,sorted_price)
54 1 [1, 11, 20, 22, 33, 54]
7.字典
如何用代码实现一个通讯录?通讯录的特点是可以用人名查找到对应的手机号。之前学的列表怎么样呢?用列表的话我们就有了这样一个通讯录,但一串电话号码根本不知道谁是谁的,这连通讯录的基本目的,通过名字查电话号码都做不到。如果我们可以把人名和电话号码绑定起来就好了。字典 Dictionary 这个数据结构可以帮我们实现。字典用于储存键值,对键的英文是key,值是value,键会有对应的值键是用来查找值的,这和我们现实生活中的字典很像,我们查字典的时候,通过字作为键来获得作为值的示意。
注意字典只能通过键来查找值,不能通过值来查键(当然通过其它方法也能做到)。
空的字典用一对花括号表示,要在字典里面放入多个键值对,就用花括号把它们包住键和值之间用引号表示,对应键值对之间用逗号分隔。
比如通讯录,如contacts={‘vivi’:‘13110757145’,‘lili’:‘13110757146’,‘haha’:‘13111757147’,‘lili’:‘13110767711’},键是名字,值是电话号码。
上面的例子中,lili出现了两次,但是字典中的键是唯一的,所以后面的键值对会覆盖前面的键值对,那么如何区分两个lili呢?可以利用元祖,如contacts={(‘lili’,22):‘13110257146’,(‘lili’,21):‘13210767211’},这里面的21,22可以是他们的年龄或者其它什么。这样查找是就能用整个元祖来作为键。
如lili_phone=[(‘lili’,21)],如要在字典里添加元素,可以用字典名[键]=值,如contacts[‘王五’]=‘13110727148’,删除元素可以用del contacts[‘王五’],如果你想查字典里有多少键值对,用len(contacts)即可。
下面是实例:
#结合input,字典,if判断,做一个查询流行语含义的电子词典
talk_dict={'觉醒年代':'《觉醒年代》首次出现在《乌合之众》一书中,指的是一种社会现象,即在某一时期,社会中的一部分人群开始觉醒,开始有了自己的思想,有了自己的主张,有了自己的行动,有了自己的目标,有了自己的生活方式,有了自己的价值观,有了自己的人生观,有了自己的世界观,有了自己的人生目标,有了自己的人生追求,有了自己的人生理想,有了自己的人生信仰','佛系':'佛系是一种生活态度,是一种生活方式,是一种生活理念,是一种生活观念','yyds':'意思是“永远滴神”','666':'666是一种赞美,是一种夸奖,是一种称赞,是一种赞扬,是一种表扬,是一种夸赞,是一种赞许,是一种赞美之词,是一种赞美之辞,是一种赞美之意,是一种赞美之情,是一种赞美之意'}
talk_dict['加油']='加油是一种鼓励,是一种支持,是一种助威,是一种鼓舞,是一种激励,是一种鼓劲,是一种打气,是一种助威声,是一种鼓励声,是一种助威声,是一种鼓舞声,是一种激励声,是一种鼓劲声,是一种打气声'
#添加键‘加油’,键值为'加油是一种鼓励,是一种支持,是一种助威,是一种鼓舞,是一种激励,是一种鼓劲,是一种打气,是一种助威声,是一种鼓励声,是一种助威声,是一种鼓舞声,是一种激励声,是一种鼓劲声,是一种打气声'
query=input('请输入你要查询的流行语') #输入666
if query in talk_dict:
print('您查询的流行语是:')
print(talk_dict[query])
else:
print('抱歉,没有找到您要查询的流行语')
print(f'当前词条收录的名词总数是:',len(talk_dict))
抱歉,没有找到您要查询的流行语
当前词条收录的名词总数是: 5
如输入觉醒时代则是如下结果:
您查询的流行语是:
《觉醒年代》首次出现在《乌合之众》一书中,指的是一种社会现象,即在某一时期,社会中的一部分人群开始觉醒,开始有了自己的思想,有了自己的主张,有了自己的行动,有了自己的目标,有了自己的生活方式,有了自己的价值观,有了自己的人生观,有了自己的世界观,有了自己的人生目标,有了自己的人生追求,有了自己的人生理想,有了自己的人生信仰。
8.for循环的应用
for循环
假如你有全公司上万人的体温自测报备信息,需要找出来有没有人体温高于 38 度,一条一条看的话,估计等你找着的时候疫情都结束了。在拍照里我们可以用 for 循环进行迭代,迭代的对象可以是列表、字典、字符串等。
Python和C语言等等for循环完全不同,C语言的for更类似于Python中的while。
for循环的具体格式是: for 变量名 in 可迭代对象: 可迭代对象是可以逐个访问元素的对象,如字符串,列表,元祖,字典,集合。
这个变量名会被依次赋值为列表里面的每一个元素,一直到最后一个针对每个元素的操作写在 for 的下面一行,所有前面带缩进的都会被视为这个 for 循环里面的语句对每个元素都会执行一遍。比如:
temp_list=[36.4,37,37.1,38,36.9,37.2,37.3]
for temp in temp_list:
if temp>37.2:
print(temp)
print(f'发烧完犊子了')
38
发烧完犊子了
37.3
发烧完犊子了
但这样并不能知道具体是谁发烧了,如果我们还有一个以工号为键,以体温为值的字典,利用 for 循环就能筛选出发烧的人。
这里就用到字典的keys()方法,可以返回字典中的所有键,然后用for循环来遍历所有的键,如for key in temp_dict.keys(): print(key),
values方法可以返回字典中的所有值,items方法可以返回字典中的所有键值对。(items方法返回的是元祖,元祖中的第一个元素是键,第二个元素是值.)
temperature_dict = {"111":36.4, "112":36.6, "113":36.2}这里就用到字典的items()方法
("113", 36.2) 因为用的items方法,for在这里对应两个变量,等于是吧'113'赋值给staff_id,36.2赋值给temperature
for staff_id, temperature in temperature_dict.items():
dict.
if temperature >= 38:_temp>37.2
print(staff_id)
具体到上面说的例子 ,实现代码如下:
temp_dict={'张三':36.4,'李四':37,'王五':37.1,'赵六':38,'田七':36.9,'刘八':37.2,'周九':37.3}
for name in temp_dict.keys():#keys()方法返回键,也就是:前面的名字
if temp_dict[name]>37.2:#name 对应的值大于37.2
print(name)#打印名字
print(f'发烧完犊子了')
for person_temp in temp_dict.values():#values()方法返回值,也就是:后面的温度
if person_temp>37.2:
print(person_temp)
print(f'发烧完犊子了')
for name,person_temp in temp_dict.items():#items()方法返回键值对,也就是:前面的名字和后面的温度
if person_temp>37.2:
print(f'{name}体温{person_temp}发烧完犊子了')
赵六
发烧完犊子了
周九
发烧完犊子了
38
发烧完犊子了
37.3
发烧完犊子了
赵六体温38发烧完犊子了
周九体温37.3发烧完犊子了
for循环配合range
大数学家高斯在小学时被老师出题计算,从 1- 100 数字的和,用代码打 1 + 2 + 3 + 4,一直加到 100 都挺累人的。for循环结合range 的作用就在这个时候体现出来。 range 用来表示整数数列括号里面第一个数字表示起始值,最后一个数字表示结束值。需要注意的是,结束值不在序列的范围内,比如 for i in range (5,)会依次被赋值为从 5 到 9 的数字,但不会为10。
range还可以有 第三个参数–步长,也就是每次跨几个数字,如for i in range(1,10,2):这里是2,所以打印1,3,5,7,9。
那么高斯的问题就可以迎刃而解。
#高斯的那个求和公式就可以用range()函数来实现
total=0#定义一个变量来存储求和的结果
for i in range(1,101):#依次取出0到100的数字
total=total+i#依次加每次取出的数字
print(total)#打印求和的结果
5050
9.while循环的应用
假如你想用相机捕捉日落的整个过程,要懒得一直盯着,于是决定写一个自动化程序,持续拍照,直到天空亮度小于500。但这要怎么写呢?假设我们有个用来测量当前天空亮度的叫做 measure brightness 的函数可以用,如果只用这个 if 判断会出现一个问题,那就是这个程序只会进行一次判断,最多也就照一张照片,捕捉不到全过程。但如果我们用 for 循环重复执行 if 判断,这样会执行 100 次判断,感觉比之前那个靠谱,但由于计算机运行极快,循环 100 次也很可能撑不到日落结束。当前摆在我们面前的难题是 if 判断要进行多少次后,条件才会为假?我们不知道,但没关系,偶循环会踏着七彩祥云前来拯救我们。
它的基本结构长这样, while 关键词后面跟上一个条件,只要求值出来为布尔值,也就是 true 或 false 都可以作为条件。计算机会判断这个条件A是否为真,如果为真,执行下方缩进部分的内容,然后再次判断条件是否为真,如果为真,执行行动如此循环,直到条件为假,退出循环。
while 条件A:
行动B
那么那个拍照的要求就很容易实现了。
while measure_brightness() >= 500:
#拍照片
take_photo()
这个例子说明在条件何时结束未知的情况下,while循环比 for 循环更适合使用。
下面就是while的实际应用例子:完成一个求用户输入平均值的程序。
#完成一个求用户输入平均值的程序
print('我是一个求平均值的程序')
total=0#总数归零
i=0#数字个数归零
user_input=input('请输入数字,所有数字后按q结束')
while user_input!='q':#当用户输入的不是q时,执行循环体
i=i+1#数字个数加1
num=float(user_input)#把用户输入的字符串转换成数字
total=total+num#把用户输入的数字加到总数上
user_input=input('请输入数字,所有数字后按q结束')#再次让用户输入数字
if i==0:
user_age=0#如果用户没有输入数字,那么平均值就是0
else: user_ave=total/i#如果用户输入了数字,那么平均值就是总数除以数字个数
print('平均值是'+str(user_ave))
我是一个求平均值的程序
平均值是
每获得到用户的一次输入,就把和以及个数都增加一下,但这个增加操作应该放在什么位置呢?可以确定的是它应该在 while 循环的里面,否则只会被加一次。如果我们放在这个 user input 的后面,那么第一次获取到的 input 数字就没有被加进来。而且如果用户在这一次里输入的是q,我们把 q 去加上 total 程序就炸了,所以它应该出现在这个 input 的前面。
四.定义我们自己的函数。
我们不仅可以调用函数,也可以定义自己的函数。我们可以把定义函数想象城市制作一个负责某一特定任务的机器。一旦制作好后,当你再需要完成那个任务的时候,直接用那个函数就好了,不需要再反复定义。
比如计算扇形面积的公式是S=nπr**2/360,其中n是扇形的角度,r是扇形的半径,π是圆周率。首先是def关键词来表示开始定义函数,后面跟上函数的名字括号、冒号,然后还是我们熟悉的缩进,又要划分哪些代码属于这个函数的定义范围。接下来我们可以把之前计算第一个扇形面积的代码全部搬进这个函数的定义里面,现在这个函数就定义完成了。需要注意的是,定义函数的时候,里面的代码都不会被执行,只有在调用函数的时候才是里面代码被实际执行的时候。
def calculate_area(n,r):#定义一个函数,函数名是calculate_area,参数是n合r。
s=n*3.14*r**2/360#函数体
print(f'扇形的面积是{s}')#打印函数的返回值
return s#返回函数的返回值
calculate_area(90,5)#调用函数,函数名(参数)
扇形的面积是19.625000000000004
19.625000000000004
return 写在函数的最后一行,后面跟上我们想要他返回的东西,如果不加return,那么函数结束之后返回的值就是none。
我们在后面加上s1=calculate_area(90,5)就可以将的到的值赋值给s1,然后进行下一步操作了,那么我们完善一下之前的BMI计算器:
写一个计算BMI的函数,函数名为 caLcuLate_BMI。
1.可以计算任意体重和身高的BMI值
2.执行过程中打印一句话,“您的BMI分类为:XX”
3.返回计算出的BMI值
BMI=体重/(身高**2)BMI分类: 偏瘦:BMI <=18.5 正常: 18.5<BMI<=25 偏胖:25<BMI<=30 肥胖:BMI>30
def calculate_BMI(weight,high):#定义一个函数,函数名是calculate_BMI
BMI=weight/(high**2)
if BMI<=18.5:
category='偏瘦'
elif BMI>18.5 and BMI<25:#elif是else if的缩写,表示如果前面的条件不成立,再判断这个条件
category='正常'
elif BMI>25 and BMI<30:
category='偏胖'
elif BMI>25 and BMI<30:
category='肥胖'
print(f'您的BMI分类为{category}')
return BMI
calculate_BMI(70,1.8)#调用函数,函数名(参数)
result=calculate_BMI(70,1.8)#调用函数,函数名(参数),注意这里调用的两次函数,所以会打印两次“您的BMI分类为:XX”,虽然是接收返回值,但是仍然会打印
print(result)
#函数的参数可以有默认值,如def 函数名(参数1,参数2=默认值): 默认值是可选的,如果不传参数2,就会用默认值
您的BMI分类为正常
您的BMI分类为正常
21.604938271604937
总结
主要介绍了Python语言中的数学计算、数据类型、交互、条件判断、循环等基础知识点。内容包括了Python中整数的表示、基本运算、math库的使用、不同数据类型的特点、输入输出操作、条件语句和循环语句的用法,以及如何使用for循环和while循环处理数据。通过实例代码,展示了如何在Python中进行简单的数学计算、数据类型转换、用户交互、逻辑判断和循环控制。