Python的流程控制语句

Python中的控制语句

控制语句由条件语句,循环语句构成

条件判断语句

条件语句是值根据条件表达式的的计算结果来控制程序流向不同的代码块,python中的条件语句有if 语句,if else 语句以及 if elif else 语句。

先介绍一下Python中的控制台输入函数input(), input()捕获用户的输入并将其转化为字符串,声明如下:

input([prompt])  ->  string
msg = input("请输入你的幸运数字:")
print(type(msg))
请输入你的幸运数字:4
<class 'str'>
Process finished with exit code 0

如果输入的内容要以数字格式被运用,可以强制用int 或者float去转换。

x = input("请输入:")
print(type(x))
x += 1
print(x)
File "E:/leaningPython/task1.py", line 262, in <module>
    x += 1
TypeError: must be str, not int

Process finished with exit code 1

这里由于接收的x返回的是字符串格式,并不能用于计算,这里我用int去转化一下,然后输入数字之后即可用于计算

x = int(input("请输入:"))
print(type(x))
x += 1
print(x)

总结一下input()函数的特点:
• 该函数用来获取用户的输入
• input()调用后,程序会立即暂停,等待用户输入
• 用户输入完内容以后,点击回车程序才会继续向下执行,可以起到阻塞程序的作用

print("hello Python")
input()
print("hello world")

# 在打印出hello Python 之后,如果不输入内容,后面的语句不会被执行,程序处于等待状态

• 用户输入完成以后,其所输入的的内容会以返回值得形式返回

if 语句

语法:

if(条件表达式):
	代码块

执行的流程:
• if语句在执行时,会先对条件表达式进行求值判断,
• 如果为True,则执行if后的语句
• 如果为False,则不执行

强调一下缩进问题,同一个代码块中包含的代码保持着同一个缩进级别,所以要么都执行,要么不执行。

if else 语句

语法

if 条件表达式 :
      代码块
  else :
      代码块

执行流程:
• if-else语句在执行时,先对if后的条件表达式进行求值判断
• 如果为True,则执行if后的代码块
• 如果为False,则执行else后的代码块

这里我觉得有必要在提一下之前的之前学习过的三元运算符
语句1 if 条件表达式 else 语句2

和if else条件语句的区别是三元运算符没有代码块(眼见的就是没有冒号),三元运算符有value返回(不是语句1的value 就是语句2的value)

if elif else

if elif else语句是对if else语句的补充,当程序的条件分支很多的时候,可以使用该语句。

语法:

if 条件表达式 :
      代码块
  elif 条件表达式 :
      代码块
  elif 条件表达式 :
      代码块
   ........
  else :
      代码块

执行流程:
• if-elif-else语句在执行时,会自上向下依次对条件表达式进行求值判断,
• 如果表达式的结果为True,则执行当前代码块,然后语句结束
• 如果表达式的结果为False,则继续向下判断,直到找到True为止
• 如果所有的表达式都是False,则执行else后的代码块

总结: if-elif-else中只会有一个代码块会执行

这里给大家演示一些示例代码,个人理解 if else 和if elif else的区别,在条件表达式区间定义明确的情况下其实这里没什么区别。

month = float(input("请输入现在的月份:"))
#这里是为了防止浮点型小数
if 1 <= month <= 12:
    if 1 <= month <= 3:
        print("你的春天到了!")
    if  3 < month <= 6:
        print("火辣辣的夏天来了!")
    if 6 < month <= 9:
        print("一叶落而至天下秋!")
    if 9 < month <=12:
        print("冰雪世界来了!")
else:
    print("输入的月份不合法!")
month = float(input("请输入现在的月份:"))
#5这里是为了防止用户恶意输入浮点型小数,程序直接报错
if 1 <= month <= 12:
    if 1 <= month <=3:
        print("你的春天到了!")
    elif 3 < month <= 6:
        print("火辣辣的夏天来了!")
    elif 6 < month <= 9:
        print("一叶落而值天下秋!")
    else:
        print("冰雪世界来了!")
else:
    print("输入的月份不合法!")

以上两段代码展现了在条件定义明确的情况下,逻辑上并不会有什么问题.

下面也举例说明一下,如果条件表达式定义的区间不够的情况下,会出现的问题

month = float(input("请输入现在的月份:"))
#这里是为了防止浮点型小数
if 1 <= month <= 12:
    if month <= 3:
        print("你的春天到了!")
    elif month <= 6:
        print("火辣辣的夏天来了!")
    elif month <= 9:
        print("一叶落而至天下秋!")
    else:
        print("冰雪世界来了!")
else:
    print("输入的月份不合法!")

上面的代码的条件判断都是单向的,按照正常的输入和理解也不会有问题,但是如果输入的时候把if elif else语句中的判断顺序变了的话,可能会出现不合理的情况

if 1 <= month <= 12:
    if month <= 3:
        print("你的春天到了!")
    elif month <= 9:
        print("一叶落而至天下秋!")
    elif month <= 6:
        print("火辣辣的夏天来了!")
    else:
        print("冰雪世界来了!")
else:
    print("输入的月份不合法!")

上述代码把秋天和夏天的判断顺序改变了,所以在输入月份为5的时候,直接输出“一叶落而知天下秋”。这里仅仅是为了解释条件定义不严谨可能会给程序逻辑造成的问题,可能一般情况下大家也不会出现这个问题。

上述的if 语句是可以嵌套使用的,嵌套语句有很多种写法,但是要注意把所有的分支情况都考虑在内,编写条件语句时最好避免使用嵌套语句,嵌套的层次多了可能自己都糊涂了,嵌套语句也不利于阅读理解,可能会漏掉可能性。语法上else子句都是可以省略的

循环语句

循环语句通俗来说就是重复执行一段代码块,通常用于遍历集合和累加计算,Python中主要用while循环,for循环。 i++, i-- (这种自增自减方式不被python支持)

while 循环语句

语法:

while 条件表达式 :
      代码块
  else:
       代码块

执行过程:
当条件表达式的值为True时,依次执行while代码块中的语句,直到条件表达式的值为False(就是整个while循环体执行完毕),则程序跳转到else语句,其中else子句可以省略。

while循环三要素

  • 设定初始值
  • 条件判断
  • 初始值自增长

在使用循环语句的时候,应该要注意条件表达式的布尔值,避免出现死循环的情况,例如

# i永远大于0,就会无限执行自增1操作
i = 0
while(i > 0):
    print(i)
    i += 1
while循环嵌套

对于while循环嵌套的理解就是在while的基础上添加了内部循环的条件判断

语法:

while 表达式1:
   while 表达式2:
      代码块2
   代码块1

在这里插入图片描述

执行过程:

  • 当表达式1为True的情况下,然后依次执行外层while 代码块的内容(红色框起来的内容)
  • 绿色框和橙色框属于同一缩进层级,由于自上而下的语句执行顺序,所以执行完绿色框的循环体后
    (绿色框的while 内层循环就可以当作一个普通的while 去理解了)再执行橙色框的内容
  • 直到表达式1为False,整个循环结束

下面用代码演示一下,大家可以通过Debug的方式一步步执行,看条件变量的值的变化是怎么引导循环体的执行的。

# i 用于控制外层while循环的变量
i = 0
while i < 5:
    # j 用于控制内层while循环的变量
    j = 0
    while (j <= i):
        #这里要说明一下print函数自带换行功能,这里为了在一行连续输出*,所以end参数被重写了
        print("*",end="")
        # 变量 j 的自增,用于控制内层循环的执行次数
        j += 1
    print()
    # 变量 i 的自增,用于控制外层循环的执行次数
    i += 1

也可逆序输出,有兴趣的话可以自己玩玩。

i = 0
while(i < 5):
    j = 0
    while (j < 5 - i):
        print("*", end="")
        j += 1
    print()
    i += 1
break 和continue语句
  • break语句可以使程序立刻跳出循环,包括else 语句 (while else),从而执行循环体之外的程序,即break语句可以提前结束循环。
  • continue语句可以跳过当次循环,执行下一次循环,但是不会跳出整个循环体。

这里通过代码来演示一下区别:

i=0
while i <6:
    i+=1
    if(i==4):
        continue
    print(i)
else:
    print("hello")

这里用的是continue,输出结果如何呢?当 if 条件表达式为True的时候,continue语句使while 循环跳出当次循环,则后面的print(i) 语句不会执行,然后继续下一次while 条件判断,继续执行循环体,直到i < 6 判断为false(这里强调一下 while 判断为false的表示while 是正常结束了)的时候则执行else语句

E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
1
2
3
5
6
hello
Process finished with exit code 0

在这里将continue换成break的话,来猜测一下是什么结果?

i=0
while i <6:
    i+=1
    if(i==4):
        break
    print(i)
else:
    print("hello")

这里当 if(i==4)为True时,break语句结束整个while else循环体的执行,所以有一下输出大家猜对了嘛?

1
2
3
Process finished with exit code 0

这里我还想列举一种情况,continue 只是跳出当前循环,所以可能使代码陷入死循环的情况

i=0
while i <6:
    if(i==4):
        continue
    i += 1
    print(i)
else:
    print("hello")

这段断码就是换掉了 if 语句和 变量 i 自增操作的顺序, 代码会卡在 i==4 的continue中陷入死循环。

E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
1
2
3
4

然后下面这段代码在while 嵌套循环中使用了break语句大家可以跑一下看结果!

j=0
while j<2:
    i=0
    while i<6:
        i+=1
        if(i==4):
            break
        print(i)
    else:
        print("hello")
    j+=1

至于For 循环的内容,以后再补充。

在这里插入图片描述
练习:

1 求1000以内所有的水仙花数

i = 10
while(i <= 1000):
    j = 0
    res = 0
    #这边通过把数字转换为字符串得到目前是几位数
    while(j < len(str(i))):
        # print(str(i)[j],end=" ")
        res += int(str(i)[j])**3
        j += 1
    # print("")
    if(res == i):
        print("%d是水仙花数" % i)
    i += 1

输出结果:

E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数

2 获取用户输入的任意数,判断其是否是质数?


num = int(input("请输入任意自然数:"))
if(num > 1):
    j = 2
    # 最开始在这个while循环的地方迷糊了,一定要记得while else的执行顺序,循环结束收才执行else..
    # 并且 while 循环体内是自上而下依次执行,if 判断结束后就执行控制变量j的自增, 然后再次循环直到      
    # while 循环结束,然后执行else语句
    while(j < num ):
        if(num % j == 0):
            print("%d不是质数" % num)
            break
        j += 1
    else:
        print("%d是质数" % num)
elif(num == 2):
    print("%d是质数" % num)
else:
    print("%d不是质数" % num)
E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
请输入任意自然数:47
47是质数

3 猜拳游戏:
• 出拳 玩家:手动输入 电脑:随机输入
• 判断输赢: 玩家获胜 电脑获胜 平局

player =int(input("请手动输入石头(0),剪刀(1),布(2):"))
print("player =", player)
computer = random.randrange(0,3)
print("computer",computer)
if(0<= player <3):
    if(computer != player):
        # print("需要仔细battle一下")
        if(computer == 0):
            if(player == 1):
                print("电脑获胜")
            else:
                print("玩家获胜")
        elif(computer == 1):
            if(player == 0):
                print("玩家获胜")
            else:
                print("电脑获胜")
        elif(computer == 2):
            if(player == 0):
                print("电脑获胜")
            else:
                print("玩家获胜")
    else:
        print("平局!")
else:
    print("手势错误,请阅读游戏规则!")
E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
请手动输入石头(0),剪刀(1),布(2):1
player = 1
computer 0
电脑获胜
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值