if-else语句、if-elif-else语句、while循环、range函数、for循环

顺序执行

在python中,程序运行遵循以下几个方面的规则:

  • 普通语句,直接执行
  • 碰到函数,将函数体载入内存,而不直接执行
  • 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行
  • 碰到if、for等控制语句,按相应控制流程执行
  • 碰到@,break,continue等,按规定语法执行
  • 碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码

    程序主入口

  • 一个 .py,除了可以被直接运行外,还可以作为模块,被其他 .py文件导入。不管是直接运行还是被导入,.py 文件的最顶层代码都会被运行(Python 用缩进来区分代码层次)。

  • 但是当一个 .py 文件作为模块被导入时,我们可能不希望一部分代码被运行。那么就可以将这部分代码的调用写在主程序中。
  • 形式:(在pycharm中的快捷键是main+Tab键main+回车

    1. if __name__ == '__main__':
    2. pass

    input语句

  • input()函数用来获取用户输入的内容

  • input()函数接收的数据类型是字符串,用eval函数可去掉引号
  • 它有阻碍程序运行的作用,当你不输入的时候,程序永远不会向下执行
  • ⽤户输⼊完内容以后,点击回⻋程序才会继续向下执行,其所输⼊的的内容会以返回值得形式返回

    条件判断

  • 条件判断是通过一条或多条判断语句的执行结果(True或False)来决定执行的代码块。在Python语法中,使用 if、elif和else三个关键字来进行条件判断。

  • 条件判断使用原则:

    • 每个条件后面要使用冒号作为判断行的结尾,表示接下来是满足条件(结果为True)后要执行的语句块。
    • if分支必须有,而elif和else分支都可以根据情况省略。使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
    • 顺序判断每一个分支,任何一个分支首先被命中并执行,则其后面的所有分支被忽略,直接跳过!可以有多个elif,但只能有一个else。
    • 在Python中没有switch–case语句。

      if语句

  • 语法:

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

  • 在代码块中,代码块会保留一组代码,而同一代码块中的代码,要么都都执行要么都不执行
  • 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束
  • 代码块就是⼀种为代码分组的机制

    if-else语句

  • 语法:

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

小案例:

s_opt=input('今天发工资了吗?Y/N:')
if s_opt.lower() == 'y':
    print('ye!吃大餐')
elif s_opt.lower() == 'n':
    print('吃泡面')
elif s_opt.lower() == 'e':
    print('退出程序')
else:
    print('你的输入有误')

if-elif-else语句

  • 利用if…elif…else 语句可以实现条件判断嵌套,也就是把 if…elif…else 结构放在另外一个 if…elif…else 结构中。
  • 语法:

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

小练习:

s_opt = input('今天发工资了吗?y/n:')
if s_opt.upper() == 'Y':
    salary = float(input('发了多少钱?'))
    debt = float(input('欠花呗多少钱?'))
    remain = salary - debt
    print(f'还了马云爸爸的花呗{debt}元,还剩下{remain}元')
    if remain > 1000:
        print('ye! 吃大餐')
    else:
        print('吃土吧!')
elif s_opt.upper() == 'N':
    print('吃泡面')
else:
    print('你输入的内容有误')
  • 这里:
    • 冒号一定是英文状态下的
    • 缩进并不强制要求4个空格,但是尽量要统一4个空格(1个Tab)
    • elif后面跟条件,else后面不跟条件
    • elif可以有多个,但else只能有一个
  • if-elif-else完整语句一定会有输出,但是if-elif-elif却不一定有输出,如果有输出,那么只会输出其中的一条

    循环控制

    通常来说就是让程序循环运行某一段代码直到满足退出条件,退出循环。在Python中的循环控制为关键字for和while。

    while循环

  • 当程序从上至下执行时,遇到while循环语句,则会判断表达式是否成立,当成立时则会进入while 循环体内,执行循环体内部执行的代码块。直到判断表达式不成立时,则终止循环

  • 死循环:当有条件的时候,检测到符合这个条件要求,会一直执行下去,调用一次死循环
  • 三要素:初始值、条件判断、自增长
  • 语法:

    while True_Expression:
      pass
    

    练习1:求100以内的和

    i = 0
    s = 0
    while i < 100:
      i += 1
      s += i
    print(s)        #5050
    

    练习2:求100以内所有的偶数和
    方法一:将上面第四行的代码改成i+=2
    方法二:利用取余,代码如下

    i = 0
    s = 0
    while i < 100:
      if i % 2 == 0:
          s += i
      i += 1
    print(s)    #2450
    

    break 和 continue语句

  • break可以实现在循环体执行过程中跳出循环体

  • continue语句用于跳过当前循环体剩余部分的代码,直接开始下一轮循环,且不会退出和终止循环。
  • 不仅while循环拥有break和continue语句,下面的for循环也有break和continue语句,且作用一致。

    while的else从句

  • while循环也可增加一个else从句,当while循环执行完毕后,会执行else语句。

  • else与while是平级缩进方式
  • 如果被break等机制强制提前终止循环,则不会执行else语句

例子:

i = 0
while i < 6:
    i += 1
    if i == 2:
        continue    #换成break
    print(i)
else:
    print('hello')

输出结果分别是:1 3 4 5 6 ‘hello’、1

while循环嵌套使用

例如:打印星号金字塔和倒金字塔
image.png
image.png

for循环

  • for循环常用来遍历,遍历的对象是可迭代的
  • 语法:

    for i in iterable:
      代码块
    

    这里面注意的是:

  • 第一行的for…in…属于固定格式

  • iterable 表示可迭代的对象
  • i是变量名(可更改),代表可迭代对象里面的每个元素
  • for循环中代码块会执行多次,列表中的序列有几个元素就会被执行几次。每执行一次都会将序列中的一个元素赋值给变量,因此可以通过变量来获取列表中的元素 ```python lst=[‘孙悟空’,’八戒’,’蜘蛛精’,’白龙马’] for i in lst: print(i) #孙悟空 八戒 蜘蛛精 白龙马

lst1=[1,2,3,4,5] for i in lst1: i += 1 print(lst1) #[1,2,3,4,5]

拿到一个列表数据,对列表数据进行处理之后再用

lst3 = [1,2,3,4,5] lst4 = [] for i in lst3: 1 += 1 lst4.append() print(lst4) #[2,3,4,5,6]

```python
list1=[1,2,3,4,5]
for i in list1:
    list1.remove()
    print(list1)        #[2,4] 这个能更好的理解迭代的含义

for循环中循环的次数,如果你在循环过程中对列表长度进行修改,那么你的循环次数就不受限制了,而是取决于列表的长度

  • for循环中的break和continue语句

    #break
    for i in range(1,10):
      if i==8:
          break        #当i=8时退出循环
      print(i)        #结果是1 2 3 4 5 6 7
    #continue
    for i in range(1,10):
      if i==8:
          continue    #当i=8时跳出当前循环下的代码,执行下一次循环
      print(i)        #结果是1 2 3 4 5 6 7 9
    

    range

  • 语法:range[start,stop,[,step]]

    • start开始位置,计数从start开始默认是0且可以省略。如range(4)等价于range(0,4)
    • stop结束为止,计数以stop结束,但不包括stop。如range(0,4)等价于[0,1,2,3],即左闭右开区间
    • step步长,不写默认为1

利用for循环嵌套实现九九乘法表
image.png

小练习

  1. 打印出1000以内所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,1^3 + 5^3+ 3^3 = 153

    # 方法一:利用数学方式
    num =100
    while num < 1000:
     a = num // 100
     b = (num - a * 100) // 10
     c = num % 10
     if pow(a, 3) + pow(b, 3) + pow(c, 3) == num:
         priny(num)
     num += 1
    
    # 方法二:利用字符串的性质
    for num in range(100, 1000):
     s = str(num)
     if s[0] ** 3 + s[1] ** 3 + s[2] ** 3 == num:
         print(num)        # 153 370 371 487
    
  2. 打印输出九九乘法表

image.png

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

image.png

  1. 猜拳游戏:出拳 玩家:手动输入 电脑:随机输入 判断输赢: 玩家获胜 电脑获胜 平局 ```python import random

player = int(input(‘请输入石头-0、剪刀-1、布-2:’)) computer = random.randint(0, 2) if (player == 0 and computer == 1) or (player == 1 and computer == 2) or (player == 2 and computer == 0): print(‘玩家胜利’) elif player == computer: print(‘平局’) else: print(‘电脑胜利’) ```

  1. 生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,只保留一个,把其余相同的数字去掉,然后再把这些数从小到大排序。

image.png
注:random模块中 randint()取的数字是双闭合区间,而randrange()取的数字是左闭右开区间,和range一致;sorted是对列表进行升序排列