【2020Python修炼记12】Python语法入门—流程控制(if分支结构+while/for循环结构)

一、条件

 灵魂三问:

什么是条件?什么可以当做条件?为何要用条件?

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(not True)
False
>>> print(not False)
True
>>> print(not 10)
False
>>> print(not 0)
True
>>> print(not None)
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 or 0)
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 is y
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 and is_beautiful):
        print('我喜欢,我们在一起吧')
    print('其他代码.............')
>>> 
>>> # if 后面的条件为真,才会执行其后的子代码
>>> age=30
>>> is_nice=True
>>> if age==30 and is_nice:
        print('yes')
        print('no')

    
yes
no   

>>> age=40
>>> is_nice=True
>>> if age>30 and is_nice:
        print('no')
        print('yes')

    
no
yes

>>> age=20
>>> is_nice=True
>>> if age<30 and is_nice:
        print('yes')

    
yes

>>>##有个报错 SyntaxError
>>> if age>30 and is_nice:
        print('no')
    print('yes')
    
SyntaxError: unindent does not match any outer indentation level
#查资料得知(在python中,tab和空格是分开的,在一个文件里混用tab和空格会报错) 出现这个错误时,是换行后,敲了四个空格(英文状态),再输入print('yes'),随后便报错。 解决方法——使用的是Python3.8 解释器,空格和tab不一样吗?
可参考下方解决方法的链接:
https://blog.csdn.net/liuyumoye/article/details/81610311
>>>

 

语法二: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 = 17
is_beautiful = True
star = '水平座'

if 16 < age < 20 and is_beautiful and star == '水平座':
    print('开始表白。。。。。')
    is_successful = True
    if is_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+=1

    
0
1
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'
>>> while True:
    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
>>> while tag:
    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,就会立刻终止本层循环

>>> while True:
    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
while True:
    while True:
        while True:
            break
        break
    break
>>> # break的方式
>>> username = 'cc'
>>> password = '123'
>>> while True: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') while True: 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
>>> while tag:
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        while tag:
            cmd=input('input message:')
            if cmd =='q':
                tag=False
            else:
                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 continue count+=1 print(count) count+=1 0 1 2 3 5 >>> count=0 >>> while count < 6: if count==4: count+=1 continue #count+=1 根本没有执行 print(count) count+=1 0 1 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打断的情况下正常结束的,才会运行')

    
0
1
2
3
5
else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才会运行
>>> count=0 >>> while count < 6: if count==4: break print(count) count+=1 else: print('else包含的代码,在while循环结束后,并且while循环是在被break打断的情况下正常结束的,才不会运行') 0 1 2 3 >>>

 

应用案例:

版本一:

>>> username = 'cc'
>>> password = '123'
>>> count=0
>>> tag=True
>>> while tag:
    if count == 3:
        print('输错三次退出')
        break
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')
    
    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        while tag:
            cmd=input('input message:')
            if cmd =='q':
                tag=False
            else:
                print('命令{x}正在运行'.format(x=cmd))
    else:
        print('账号名或密码错误')
        count+=1

        
请输入您的账号:'ccc'
请输入您的密码:'123'
账号名或密码错误
请输入您的账号:'123'
请输入您的密码:'ff'
账号名或密码错误
请输入您的账号:'22'
请输入您的密码:'222'
账号名或密码错误
输错三次退出

>>> count=0
>>> tag=True
>>> while tag:
    if count == 3:
        print('输错三次退出')
        break
    inp_name=input('请输入您的账号:')
    inp_pwd=input('请输入您的密码:')

    if inp_name  == username and inp_pwd == password:
        print('登录成功')
        while tag:
            cmd=input('input message:')
            if cmd =='q':
                tag=False
            else:
                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('登录成功') while True: 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('登录成功')
        while True:
            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('登录成功')
        while True:
            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('登录成功') while True: 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 "<pyshell#138>", line 2, in <module> inp_name=input('请输入您的账号:') File "<string>", line 0 ^ SyntaxError: unexpected EOF while parsing >>>

 

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 in l:
    print(x)

    
cat
love
mili
>>> 

【复杂版】 while

>>> l=['cat','love','mili']
>>> i=0
>>> while i<3:
    print(l[i])
    i+=1

    
cat
love
mili
>>> 

= 案例二=字典循环取值

【简单版】 

>>> dic={'k1':111,'k2':2222,'k3':333}
>>> for k in dic:
    print(k,dic[k])

    
k1 111
k2 2222
k3 333
>>> 

【复杂版】while循环可以遍历字典,不过太麻烦……(此处省略若干字)

 

=案例三=字符串循环取值

【简单版】 

>>> 
>>> info='cat love mili'
>>> for x in info:
    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('登陆成功')
        while True:
            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('登陆成功')
        while True:
            cmd=input('请输入指令:')
            if cmd=='q':#不要掉了冒号噢
                break
            else:
                print('命令{x}正在执行'.format(x=cmd))
        break
    else:
        print('账号名或密码错误')
else:
    print('输错账号密码次数过多')

    
please input your name:22
please input your code:22
账号名或密码错误
please input your name:22
please input your code:22
账号名或密码错误
please input your name:22
please 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后包含的值的个数

 

posted @ 2020-03-10 17:05  bigorangecc  阅读(555)  评论(0编辑  收藏  举报