0
点赞
收藏
分享

微信扫一扫

廖雪峰python从零入门(二)

waaagh 2022-03-22 阅读 36
python

2022.3.22
Python基础

条件判断语句
Python程序中,用 if 语句实现条件判断,根据Python的缩进规则,如果if语句判断是True,就把 缩进 的两行print语句执行了,否则,什么也不做。(python的代码是一定要有行缩进效果的)

还可以给if添加一个else语句,意思是,如果if判断是False,不要执行 if 的内容,执行else

age = 3
if age >= 18:#注意不要少了冒号,Python中把冒号之前的代码统一视作一个代码块
    print('your age is', age)
    print('adult')#如果第一条判断语句判断为真,则执行缩进语句
else:#注意不要少了冒号
    print('your age is', age)
    print('teenager')

可以用 elif 做更细致的判断
elif 是 else if 的缩写,完全可以有多个 elif ,所以if语句的完整形式就是:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

注意:① if 语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
比如:理解下面的程序为什么打印的是teenager

age = 20
if age >= 6:
    print('teenager')
elif age >= 18:
    print('adult')
else:
    print('kid')

②if判断条件还可以简写,只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

if x:
    print('True')

③看一个有问题的条件判断。很多时候我们会用input()读取用户的输入,这样可以自己输入,程序运行得更有意思
但是会出现如下错误案例

birth = input('birth: ')
if birth < 2000:
    print('00前')
else:
    print('00后')

输入1982 结果程序报错。这是因为input()返回的数据类型是strstr不能直接和整数比较,必须先把str转换成整数
注意:也不能做如下操作!

birth = int.input('birth: ')#int函数不能直接对input函数进行变量化整数操作
if birth < 2000:
    print('00前')
else:
    print('00后')

应如下做:

s = input('birth: ')
birth = int(s)
if birth < 2000:
    print('00前')
else:
    print('00后')
#注意:input输入不能为字符串如'ABC'之类的,否则依旧会报错,因为字母无法整数化

练习:小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数判断他的身体状况。

w,h = input('体重为(单位:kg):身高为(单位:m):').split(',')#正确代码 int输出多个数据  https://blog.csdn.net/qq_41657943/article/details/103603318
#h = float(input('身高为(单位:m):'))#这条代码可以用 可直接对输入数据进行数据类型转换
#w = float(input('体重为(单位:kg):'))#这条代码可以用
#h = input('身高为:'(单位:kg))#这是一条错误代码,int函数的定义应在单双引号内完成
print(type(h))#打印数据类型  int函数定义的数据类型为字符串
print(type(w))
#map(float,h,w) #这是一条错误代码  后来再学习map函数
#h,w = float(h,w)#这是一条错误代码  float expected at most 1 argument, got 2
h = float(h)#这是一条正确代码 修改定义变量的数据类型 如何批量修改h,w的数据类型以后再学习
w = float(w)
#L = [1,2.0,3.0]
#L = float(L)#这是一条错误代码  float() argument must be a string or a number, not 'list'可以用map函数解决该问题
#print(L)
bmi = w/h**2
#t = 1.175
b = ('%.1f'%bmi)#对变量浮点数的位数进行限制
#b = ('%.1f'%(bmi,t))#这是一条错误代码 批量控制只能对列表进行操作https://blog.csdn.net/weixin_42521211/article/details/111823176
#print(t)
print(bmi,b)
print(type(b))
b = float(b)
print('%f,%.1f'%(bmi,b))
if bmi < 18.5:
   print('你的bmi是%.1f,你体重过轻'%bmi)
elif 18.5 <= bmi <= 25:
   print('你的bmi是%.1f,你体重正常'%bmi)
elif 25 <= bmi <= 28:
   print('你的bmi是%.1f,你体重正常'%bmi)

输出

体重为(单位:kg):身高为(单位:m):80,1.75#这两个数字为自己输入,逗号隔开,因为之前split函数限制了用逗号。
<class 'str'>
<class 'str'>
26.122448979591837 26.1
<class 'str'>
26.122449,26.1
你的bmi是26.1,你体重正常

另:可将h,w写进列表,对列表进行变量数据类型转换(不止这一种方法),用的时候从列表内取出即可。

L = [1, 1.75, 2.356]
for name in L:
    #name = float(name)
    name = float(('%.1f'%name))
    print(type(name))
    print('hello,%s'%name)

循环语句
Python的循环有两种
一、for…in循环,依次把list或tuple中的每个元素迭代出来
for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句
例子:执行这段代码,会依次打印names的每一个元素

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

二、while循环,只要条件满足,就不断循环,条件不满足时退出循环。
在循环内部变量n不断自加,直到变为-1时,不再满足while条件,循环退出。
例子:利用循环依次对list中的每个名字打印出Hello, xxx!

L = ['Bart', 'Lisa', 'Adam']
n = -3
while n <= -1:
      print('hello,%s' % L[n])
      n = n+1

当然也可以用for in循环解决问题
L = ['Bart', 'Lisa', 'Adam']
n = -3
for name in L:
    print('hello,%s'%name)

break语句
在循环中,break语句可以提前退出循环
用法示例:

n = 1
while n <= 100:
    if n > 10: # 当n = 11时,条件满足,执行break语句
        break # break语句会结束当前循环
    print(n)
    n = n + 1
print('END')

代码逻辑:先执行第一层的while语句(进入循环),之后执行while语句内即代码第二层的 if 语句,(进行条件判断),再之后执行循环内除 if 语句之外的代码,最后执行最外层的print语句。

continue语句
循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环
用法示例:

n = 0
while n < 10:
    n = n + 1
    print(n)

该程序可以打印1~10之内的所有数,但如果我们只想打印奇数呢?

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

特别注意:break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用!
练习:写一个死循环程序

dict语法
dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
用法:dict名称+空格+等于号+空格+大括号大括号内的写法 {键+冒号+值+逗号+键+冒号+…}
举个例子来理解
假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:
给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

理解:为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

dict就是第二种实现方式,给定一个名字,比如’Michael’,dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。

注意:①dict这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。
②把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
但一个key只能对应一个value,多次对同一个key放入value,后面的值会把前面的值冲掉:

>>> d['Adam'] = 67
>>> d['Adam']
67
#多次对同一键放入值,该键对应的值会是最新放入的值 
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88

③如果key不存在,dict就会报错:判断key存在的两种方法
1、是通过in判断key是否存在:

>>> 'Thomas' in d
False

2、通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
用法:dict名称+点+get+圆括号(圆括号内标明要查找的key)

>>> d.get('Thomas')#如果dict返回值为空 则不显示结果
>>> d.get('Thomas', -1)
-1

删除dict中存在的key,用pop(key)方法,对应的value也会从dict中删除。
用法:dict名称+点+pop+圆括号(圆括号内标明要删除的key)
④ dict 内部存放的顺序和key放入的顺序是没有关系的。
⑤ dict中的 key 必须是不可变对象。因为dict根据key来计算value的存储位置
python 批量给字典赋值,更新字典
Python dict字典基本操作(包括添加、修改、删除键值对)

set语句
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key 重复元素将在set中被自动过滤。
set和dict一样是无序的,而list与tuple是有序的
set写法:
要创建一个set,需要提供一个list作为输入集合

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。
set添加元素
add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:set中key不可重复

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

set中删除元素
通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}
举报

相关推荐

0 条评论