一、条件
灵魂三问:
什么是条件?什么可以当做条件?为何要用条件?
1、 条件,就是判断依据,判断前提……
2、条件的类型
# 第一大类:显式布尔值
条件可以是:比较运算符 # age = 18 # print(age > 16) # 条件判断之后会得到一个布尔值
条件可以是:True、False # is_beautiful=True # print(is_beautiful)
# 第二大类:隐式布尔值
所有的值都可以当成条件去用 # 其中0、None、空(空字符串、空列表、空字典),代表的布尔值为False,
其余都为True
3、为何要用条件
条件有助于程序按照人的思想去执行指令,得出人想要的结果。也能够提高代码的效率和价值。
二、逻辑运算符:not、and、or
注意:(不是 not at all)
1、not、and、or的基本使用
# not:就是把紧跟其后的那个条件结果取反
# ps:not与紧跟其后的那个条件是一个不可分割的整体
>>> print(not 16 > 13)
False>>> print(notTrue)
False>>> print(notFalse)
True>>> print(not 10)
False>>> print(not0)
True>>> print(notNone)
True>>> print(not '')#'' 空值
True>>>
# and:逻辑与,and用来链接左右两个条件,两个条件同时为True,最终结果才为真
>>> print(True and 10 > 3)
True>>> print(True and 10 > 3 and 10 and 0) #条件全为真,最终结果才为True
0>>> print( 10 > 3 and 10 and 0 and 1 > 3 and 4 == 4 and 3 != 3) #偷懒原则
0>>>
# or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,
# 两个条件都为False的情况下,最终结果才为False
>>> print(3 > 2 or0)
True>>> print(3 > 4 or False or 3 != 2 or 3 > 2 or True) #偷懒原则
True>>>
三句话总结:
not 就是:真变假,假变真
and 就是:全真为真,一假即假
or 就是:一真即真,全假为假
2、优先级 not>and>or
# ps:
# 如果单独就只是一串and连接,或者说单独就只是一串or连接,按照从左到右的顺讯依次运算即可(偷懒原则)
# 如果是混用,则需要考虑优先级了
>>> res=3>4 and not 4>3 or 1==3 and 'x' == 'x' or 3 >3
>>> print(res)
False>>> #False False False
>>> res=(3>4 and (not 4>3)) or (1==3 and 'x' == 'x') or 3 >3
>>> print(res)
False
>>> #规范表达,尽量用and连接
>>> res=3>4 and ((not 4>3) or 1==3) and ('x' == 'x' or 3 >3)
>>> print(res)
False
>>>
三、成员运算符,身份运算符
1、成员运算符 in
>>> print("egon" in "hello egon") #判断一个字符串是否存在于一个大字符串中
True>>> print("e" in "hello egon") #判断一个字符串是否存在于一个大字符串中
True>>> print(111 in [111,222,33]) #判断元素是否存在于列表
True>>> #判断key是否存在于字典
>>> print(111 in {"k1":111,'k2':222})
False>>> print("k1" in {"k1":111,'k2':222})
True>>> #not in
>>> print("egon" not in "hello egon") #推荐使用
False>>> print(not "egon" in "hello egon") #逻辑同上,但语义不明确,不推荐
False>>>
2、身份运算符 is
>>>
>>> #is # 判断的是id是否相等
>>> x=10
>>> y=23
>>> x isy
False>>>
四、流程控制(即控制流程-指控制程序的执行流程)
1、分支结构——if 条件判断
==什么是分支结构==
分支结构就是根据条件判断的真假去执行不同分支对应的子代码
==为什么要用分支结构==
人类某些时候需要根据条件来决定做什么事情,
所以程序中必须有相应的机制来控制计算机具备人的这种判断能力
==如何使用分支结构==
=1、 if 的语法
完整的if语法如下图:
语法一:单独的 if
if 条件:
(四个空格)代码1
(四个空格)代码2
(四个空格)代码3
(代码前的空格,是代码等级的区分标志)
#print(1)#print(2)#print(3)#if 条件:#代码1#代码2#代码3#print(4)#print(5)
>>>
>>> age = 60
>>> is_beautiful =True>>> if (age > 16 and age < 20 andis_beautiful):print('我喜欢,我们在一起吧')print('其他代码.............')>>>
>>> #if 后面的条件为真,才会执行其后的子代码
>>> age=30
>>> is_nice=True>>> if age==30 andis_nice:print('yes')print('no')
yes
no>>> age=40
>>> is_nice=True>>> if age>30 andis_nice:print('no')print('yes')
no
yes>>> age=20
>>> is_nice=True>>> if age<30 andis_nice:print('yes')
yes>>>##有个报错 SyntaxError
>>> if age>30 andis_nice:print('no')print('yes')
SyntaxError: unindent doesnotmatch any outer indentation level#查资料得知(在python中,tab和空格是分开的,在一个文件里混用tab和空格会报错)
出现这个错误时,是换行后,敲了四个空格(英文状态),再输入print('yes'),随后便报错。
解决方法——使用的是Python3.8
语法二:if-else
if(条件):
(四个空格)代码1
else:
(四个空格)代码2
if 条件:
代码1
代码2
代码3
else:
代码1
代码2
代码3
>>>
>>> age=18
>>> if age>30:print('no')else:print('yes')
yes>>>
>>> age = 60
>>> is_beautiful =True>>> star = '水平座'
>>> if age > 16 and age < 20 and is_beautiful and star == '水平座':print('我喜欢,我们在一起吧。。。')else:print('阿姨好,我逗你玩呢,深藏功与名')print('其他代码.............')####????
语法三:if---elif--else
——elif(条件)——上一条件不满足时,才会继续执行 elif(条件),else的命令
语法3-1: if-elif
if 条件1:
代码1
代码2
代码3
elif 条件2:
代码1
代码2
代码3
elif 条件3:
代码1
代码2
代码3'''
#score=73#if score >= 90:#print('优秀')#elif score >= 80 and score < 90:#print('良好')#elif score >= 70 and score < 80:#print('普通')
#改进#score = input('请输入您的成绩:') # score="18"#score=int(score)#
#if score >= 90:#print('优秀')#elif score >= 80:#print('良好')#elif score >= 70:#print('普通')
>>>
>>> s=74
>>> if s>=90:print('A')elif s>=80 and s<90:print('B')elif s>=70 and s<80:print('C')
C>>>
>>> s=input('please input your score:')
please input your score:99
>>> s=int(s) #因为在Pyhon解释器中,会将 input()所获得的内容全部当为 字符串类型,字符串类型是不能进行大小比较的。
因此 需要将输入的分数 强制转换为整型
>>> if s>=90:print('A')elif s>=80 and s<90:print('B')elif s>=70 and s<80:print('C')
A>>>
语法3-2:if-elif-else
if 条件1:
代码1
代码2
代码3
elif 条件2:
代码1
代码2
代码3
elif 条件3:
代码1
代码2
代码3
...
else:
代码1
代码2
代码3'''
#score = input('请输入您的成绩:') # score="18"#score=int(score)#
#if score >= 90:#print('优秀')#elif score >= 80:#print('良好')#elif score >= 70:#print('普通')#else:#print('很差,小垃圾')#
#print('=====>')
语法四:if 嵌套if
age = 17is_beautiful=True
star= '水平座'
if 16 < age < 20 and is_beautiful and star == '水平座':print('开始表白。。。。。')
is_successful=Trueifis_successful:print('两个从此过上幸福的生活。。。')else:print('阿姨好')print('其他代码.............')
循环结构——循环结构就是重复执行某段代码块
2、while 循环——条件循环
=1=while循环
while条件:
代码1
代码2
代码3
while的运行步骤:
步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件,
如果条件为True则再次执行:代码1、代码2、代码3、......,
如果条件为False,则循环终止
>>>
>>> count=0>>> while count<5:print(count)
count+=101
2
3
4
>>>
=2=死循环和效率问题
>>> count=0>>> while count < 5: #5 < 5
print(count) #会一直输出 0
#while True:#name=input('your name >>>> ')#print(name)
#纯计算无io的死讯会导致致命的效率问题#while True:#1+1
#while 1:#print('xxxx')
#如何退出 --
如果你是在程序中让其自动退出,则可以使用:exit() quit() exit() 执行到此命令时,程序终止。
如果是程序陷入死循环,想强制结束,则按ctrl + c。 //这个特别关键
=3=循环的应用
# 下面的栗子,存在两个问题:
# 1、重复代码
# 2、输对了,应该不用再重复
>>> username = 'cc'
>>> password = '123'
>>> whileTrue:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')else:print('账号名或密码错误')
请输入您的账号:'cc'请输入您的密码:123账号名或密码错误
请输入您的账号:'cc'请输入您的密码:'123'登录成功
请输入您的账号:'c'请输入您的密码:'123'账号名或密码错误
请输入您的账号:'ccc'请输入您的密码:'123'账号名或密码错误
请输入您的账号:'dd'请输入您的密码:'123'账号名或密码错误
请输入您的账号:'dd'请输入您的密码:'12'账号名或密码错误
请输入您的账号:'cc'请输入您的密码:'123'登录成功
请输入您的账号:
=4=退出循环的两种方式
=方式一:将条件改成 false
>>>
>>> tag=True>>> whiletag:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')
tag= False #登录成功后,就会执行该代码,之后的代码还会运行,下次循环判断条件时才生效——还会再做一次循环判断,然后退出循环
else:print('账号名或密码错误')
请输入您的账号:'dd'请输入您的密码:'123'账号名或密码错误
请输入您的账号:'cc'请输入您的密码:'123'登录成功>>>
=方式二:while+break,只要运行到break,就会立刻终止本层循环
>>> whileTrue:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')break #立刻终止本层循环
else:print('账号名或密码错误')
请输入您的账号:'cc'请输入您的密码:'1234'账号名或密码错误
请输入您的账号:'cc'请输入您的密码:'123'登录成功>>>
=7=while 循环嵌套
#每一层都必须配一个break
whileTrue:whileTrue:whileTrue:break
break
break
>>> #break的方式
>>> username = 'cc'
>>> password = '123'
>>> whileTrue: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whileTrue: cmd=input('input message:')if cmd =='q':break print('命令{x}正在运行'.format(x=cmd))break #立刻终止本层循环 else:print('账号名或密码错误') 请输入您的账号:'dd'请输入您的密码:'123'账号名或密码错误 请输入您的账号:'cc'请输入您的密码:'123'登录成功 input message:'v'命令v正在运行 input message:'q' >>>
>>> #改变条件的方式
>>> tag=True>>> whiletag:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whiletag:
cmd=input('input message:')if cmd =='q':
tag=Falseelse:print('命令{x}正在运行'.format(x=cmd))else:print('账号名或密码错误')
请输入您的账号:'cc'请输入您的密码:'123'登录成功
input message:'v'命令v正在运行
input message:'q'
>>>
=8=while+continue
结束本次循环,直接进入下一次
强调:在continue之后添加同级代码毫无意义,因为永远无法运行
>>> username = 'cc'
>>> password = '123'
>>> count=0>>> while count < 6:if count==4: count+=1 continuecount+=1 print(count) count+=101 2 3 5 >>> count=0>>> while count < 6:if count==4: count+=1 continue #count+=1 根本没有执行 print(count) count+=101 2 3 5 >>>
=9=while+else
>>> username = 'cc'
>>> password = '123'
>>> count=0>>> while count < 6:if count==4:
count+=1
continue
print(count)
count+=1
else:print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行')
01
2
3
5else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行>>> count=0>>> while count < 6:if count==4:break
print(count)
count+=1
else:print('else包含的代码,在while循环结束后,并且while循环是在被break打断的情况下正常结束的,才不会运行')
01
2
3
>>>
应用案例:
版本一:
>>> username = 'cc'
>>> password = '123'
>>> count=0>>> tag=True>>> whiletag:if count == 3:print('输错三次退出')breakinp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whiletag:
cmd=input('input message:')if cmd =='q':
tag=Falseelse:print('命令{x}正在运行'.format(x=cmd))else:print('账号名或密码错误')
count+=1请输入您的账号:'ccc'请输入您的密码:'123'账号名或密码错误
请输入您的账号:'123'请输入您的密码:'ff'账号名或密码错误
请输入您的账号:'22'请输入您的密码:'222'账号名或密码错误
输错三次退出>>> count=0>>> tag=True>>> whiletag:if count == 3:print('输错三次退出')breakinp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whiletag:
cmd=input('input message:')if cmd =='q':
tag=Falseelse:print('命令{x}正在运行'.format(x=cmd))else:print('账号名或密码错误')
count+=1请输入您的账号:'cc'请输入您的密码:'123'登录成功
input message:'c'命令c正在运行
input message:'q'
>>>
版本二:(优化版)
test 1
>>> username = 'cc'
>>> password = '123'
>>> count=0>>> while count < 3:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whileTrue:
cmd=input("输入命令>:")if cmd == 'q':
break # 只是退出 子循环
else:print('命令{x}正在运行'.format(x=cmd))break #整个程序结束,退出所有while循环
else:print('账号名或密码错误')
count+=1
else:print('输错3次,退出')
# 第三个else包含的代码,会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行
前面两个else,则是对应两个 if。
请输入您的账号:'123'请输入您的密码:'cc'账号名或密码错误
请输入您的账号:'1234'请输入您的密码:'234'账号名或密码错误
请输入您的账号:'cc'请输入您的密码:'12344'账号名或密码错误
输错3次,退出
test 2
>>> count=0>>> while count < 3:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whileTrue:
cmd=input("输入命令>:")if cmd == 'q':
break
else:print('命令{x}正在运行'.format(x=cmd))break #整个程序结束,退出所有while循环
else:print('账号名或密码错误')
count+=1
else:print('输错3次,退出')
请输入您的账号:'cc'请输入您的密码:'123'登录成功
输入命令>: 'v'命令v正在运行
输入命令>: 'q'
>>>
test 3_去掉第二个break(作用-#整个程序结束,退出所有while循环)
>>> count=0>>> while count < 3:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whileTrue:
cmd=input("输入命令>:")if cmd == 'q':
break
else:print('命令{x}正在运行'.format(x=cmd))#break
else:print('账号名或密码错误')
count+=1
else:print('输错3次,退出')
请输入您的账号:'cc'请输入您的密码:'123'登录成功
输入命令>: 'ww'命令ww正在运行
输入命令>: 'q'请输入您的账号:'cc'请输入您的密码:'1234'账号名或密码错误
请输入您的账号:'1223'请输入您的密码:'eee'账号名或密码错误
请输入您的账号:'123'请输入您的密码:'ee'账号名或密码错误
输错3次,退出
test 4
再来试一遍,可以总结出,如果不给外循环加一个break,
就算是输入正确,也会继续执行内循环,知道输错三次才会结束整个程序。>>> count=0>>> while count < 3:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')if inp_name == username and inp_pwd ==password:print('登录成功')whileTrue:
cmd=input("输入命令>:")if cmd == 'q':
break
else:print('命令{x}正在运行'.format(x=cmd))#break #整个程序结束,退出所有while循环
else:print('账号名或密码错误')
count+=1
else:print('输错3次,退出')
请输入您的账号:'cc'请输入您的密码:'123'登录成功
输入命令>: 'q'请输入您的账号:'cc'请输入您的密码:'123'登录成功
输入命令>: 'w'命令w正在运行
输入命令>: 'q'请输入您的账号:
Traceback (most recent call last):
File"", line 2, in inp_name=input('请输入您的账号:')
File"", line 0^SyntaxError: unexpected EOFwhileparsing>>>
3、for循环——取值循环
==1==什么是for循环
循环就是重复做某件事,for循环是python提供第二种循环机制
==2==为什么要有for循环
理论上for循环能做的事情,while循环都可以做
之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁
==3==如何使用for循环
=基本语法=
语法:for 变量名 in 可迭代对象: # 可迭代对象可以是:列表、字典、字符串、元组、集合代码1
代码2
代码3
...
= 案例 一= 循环取值
【简单版】 for
>>>
>>> l=['cat','love','mili']>>> for x inl:print(x)
cat
love
mili>>>
【复杂版】 while
>>> l=['cat','love','mili']>>> i=0>>> while i<3:print(l[i])
i+=1cat
love
mili>>>
= 案例二=字典循环取值
【简单版】
>>> dic={'k1':111,'k2':2222,'k3':333}>>> for k indic:print(k,dic[k])
k1111k22222k3333
>>>
【复杂版】while循环可以遍历字典,不过太麻烦……(此处省略若干字)
=案例三=字符串循环取值
【简单版】
>>>
>>> info='cat love mili'
>>> for x ininfo:print(x)
c
a
t
l
o
v
e
m
i
l
i>>>
【复杂版】
while循环也可以循环取值,不过太麻烦……(此处省略若干字)
==4== for循环控制循环次数 range()
=案例一=
>>> #python 3.8版本中:
>>> range(10)
range(0,10)>>> range(0,10)
range(0,10)>>> range(1,9)
range(1, 9)>>>
>>> #python 2 与python 3 会有不同形式的输出:
>>>
=案例二= for+break、 for+else——同while循环一样
>>> username='cc'
>>> usercode='123'
>>> for i in range(3):
name1=input('please input your name:')
code1=input('please input your code:')if name1==username and code1==usercode:print('登陆成功')whileTrue:
cmd=input('请输入指令:')if cmd=='q':#不要掉了冒号噢
break
else:print('命令{x}正在执行'.format(x=cmd))break
else:print('账号名或密码错误')else:print('输错账号密码次数过多')
please input your name:cc
please input your code:123登陆成功
请输入指令:1命令1正在执行
请输入指令:'q'命令'q'正在执行
请输入指令:q>>> for i in range(3):
name1=input('please input your name:')
code1=input('please input your code:')if name1==username and code1==usercode:print('登陆成功')whileTrue:
cmd=input('请输入指令:')if cmd=='q':#不要掉了冒号噢
break
else:print('命令{x}正在执行'.format(x=cmd))break
else:print('账号名或密码错误')else:print('输错账号密码次数过多')
please input your name:22please input your code:22账号名或密码错误
please input your name:22please input your code:22账号名或密码错误
please input your name:22please input your code:22账号名或密码错误
输错账号密码次数过多>>>
=案例三= range()补充
#1、for搭配range,可以按照索引取值,但是麻烦,所以不推荐#l=['aaa','bbb','ccc'] # len(l)#for i in range(len(l)):#print(i,l[i])#
#for x in l:#print(l)
#2、range()在python3里得到的是一只"会下蛋的老母鸡"
==5== for+continue
#for i in range(6): # 0 1 2 3 4 5#if i == 4:#continue#print(i)
==6== for循环嵌套——:外层循环循环一次,内层循环需要完整的循环完毕
#for i in range(3):#print('外层循环-->', i)#for j in range(5):#print('内层-->', j)
#补充:终止for循环只有break一种方案
==7==补充关于print()的知识
print('hello %s' % 'egon')#1、print之逗号的使用
print('hello','world','egon')#2、换行符
print('hello\n')print('world')#3、print值end参数的使用
print('hello\n',end='')print('word')print('hello',end='*')print('world',end='*')
4、比较while循环和for循环的异同
==相同之处==
都是循环,for循环可以干的事,while循环也可以干
==不同之处==
while循环称之为 条件循环,循环次数取决于条件何时变为假
for循环称之为 "取值循环",循环次数取决in后包含的值的个数