Python之路-条件控制与循环语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路-条件控制与循环语句相关的知识,希望对你有一定的参考价值。

一、什么是条件控制语句

  条件控制语句,也可以称之为判断语句,通过一条或多条的执行结果来决定接下来要执行的代码块。

二、if语句

  if语句是用来进行判断的,最简答的if语句只有一个判断一个操作。

  语法:

    if 条件: 条件成立,执行代码块

  如:

\'\'\'\'
    if语句

    if 条件表达式:  条件成立则执行
       执行一下代码

\'\'\'
# i = 0
# print(\'---------if开始\')
# if i < 5:#条件成立
#     print(\'我比5大\')
# print(\'---------if结束\')

  if-else

  和其他语言一样,python中也提供了与if搭配使用的else语句,else表示否则。在没有通过if判断的时候,执行的另一个操作。

  语法:

    if 条件: 满足条件执行的代码块1 else: 没有满足if条件执行的代码块2

  如:

\'\'\'
    if 条件表达式:
       要执行的代码块
    else : 条件不成立的时候
       要执行的代码块
\'\'\'
# i = 10
# if i < 5:
#     print(\'我比5小\') #条件成立
# else: #条件不成立的时候
#     print(\'我比5大\')

 

  if-elif-else

  一个if只能有一个else,但是可以拥有多个elif。

  Python中没有switch-case,可以使用if-elif-else来代替switch-case

  语法:

    if 条件:

      满足if条件执行的代码块1

    elif 条件1:

      满足条件1执行的代码块2

    elif 条件2:

      满足条件2执行的代码块3

    else:

      不满足以上条件执行的代码块4

 

  if嵌套

  If嵌套就是在if-elif-else结构中再嵌套另外一个if-elif-else结构。

  语法:

    if 条件:

      满足if条件执行的代码块

    elif 条件1:

      if 条件1-1:

          满足条件1-1执行的代码块

      elif 条件1-2:

          满足条件1-2执行的代码块

      else:

          都不满足执行的代码块

    elif 条件2:

      满足条件2执行的代码块

    elif 条件3:

      满足条件1执行的代码块

\'\'\'
    一个if只能有一个else,但是可以拥有多个elif.
    Python中没有switch-case,可以使用if-elif-else来代替switch-case
\'\'\'

\'\'\'
    使用方法:
    if 条件:
       满足if条件执行的代码块1
    elif 条件1:
         满足条件1执行的代码块2
    elif 条件2:
         满足条件2执行的代码块3
    else:
         不满足以上条件执行的代码块4
\'\'\'

\'\'\'
    if 嵌套 就是在if-elif-else结构中再嵌套另外一个if-elif-else结构
\'\'\'

# x = int(input(\'请输入第一个数:\'))
# y = int(input(\'请输入第二个数:\'))
# z = int(input(\'请输入第三个数:\'))

# if x == y == z:
#     print(\'三个数相等!\')
# if x > y:
#     if x > z :
#         print(\'最大数为: %d\'%x)
#     else:
#         print(\'最大数为: %d\'%z)
# elif x > z :
#     if y > z:
#         print(\'最大数为:%d\'%y)
# else:
#     if y > z:
#         print(\'最大数为:%d\'%y)
#     else:
#         print(\'最大数为:%d\'%z)

\'\'\'
    猜拳游戏
    random.randint(x,y) 返回x 到 y自检的随机数
\'\'\'
# import random
# user = input(\'请输入石头、剪刀、布:\')#接受用户输入的内容
# cont = [\'石头\',\'剪刀\',\'布\']#初始化数据
# num = random.randint(0,3)#获取0-2之间的随机数
#
# if user == \'石头\':
#     if cont[num] == \'石头\':
#         print(\'用户输入的是%s,电脑输入的是%s,平局\'%(user,cont[num]))
#     elif cont[num] == \'剪刀\':
#         print(\'用户输入的是%s,电脑输入的是%s,你赢了\'%(user,cont[num]))
#     elif cont[num] == \'布\':
#         print(\'用户输入的是%s,电脑输入的是%s,电脑赢了\'%(user,cont[num]))
# elif user == \'剪刀\':
#     if cont[num] == \'石头\':
#         print(\'用户输入的是%s,电脑输入的是%s,电脑赢了\' % (user, cont[num]))
#     elif cont[num] == \'剪刀\':
#         print(\'用户输入的是%s,电脑输入的是%s,平局\' % (user, cont[num]))
#     elif cont[num] == \'布\':
#         print(\'用户输入的是%s,电脑输入的是%s,你赢了\' % (user, cont[num]))
# elif user == \'布\':
#     if cont[num] == \'石头\':
#         print(\'用户输入的是%s,电脑输入的是%s,你赢了\' % (user, cont[num]))
#     elif cont[num] == \'剪刀\':
#         print(\'用户输入的是%s,电脑输入的是%s,电脑赢了\' % (user, cont[num]))
#     elif cont[num] == \'布\':
#         print(\'用户输入的是%s,电脑输入的是%s,平局\' % (user, cont[num]))
# else:
#     print(\'您的输入有误,拜拜!\')


\'\'\'
    练习
\'\'\'

# score = int(input(\'请输入分数:\'))
# if score >= 90:
#     print(\'同学你好棒!你的成绩是A\')
# elif 60 <= score <= 89:
#     print(\'同学表现还不错!你的成绩是B\')
# else :
#     print(\'同学你要加油哦!\')

三、循环语句

  循环语句就是在符合条件的情况下。重复执行一个代码段。Python中的循环语句有while和for。

          

while循环

  while是一个条件循环语句,与if一样,也有条件表达式。如果条件为真,while中的代码就会一直循环执行,直到循环条件不再为真才停止。

语法:

  while 条件: 代码块

练习:用while计算1到100的和

\'\'\'
    循环 while for
\'\'\'

\'\'\'
    while 条件表达式:   #当条件为true的时候进入循环
        要执行的代码块   #执行完里面的代码块则回到条件表达式  进行条件判断
\'\'\'

# i = 1 #初始化变量
# while i < 6:  #对初始化条件信息进行判断,判断成立则进入循环体
#     print(\'I LOVE YOU\')  #执行完里面的代码块则回到条件表达式
#     i+=1 #如果没有i增加  系统会不停的打印
# print(i)
\'\'\'
    Python里面没有i++  自增用i+=1
\'\'\'

\'\'\'
    计算1到100的和
\'\'\'

# i = 1
# sum = 0
# while i <= 100:
#     sum += i #sum = sum + i
#     i+=1
#     print(sum)  #在while循环里面 输出每一个sum
# print(sum) #在while循环外面 只输出最后的值

while循环嵌套

  if中可以再嵌套if,那么while中也可以嵌套while循环,从而实现一些特殊的效果。

语法:

  while 条件1:

    满足条件1执行代码块1

    while 条件2:

      满足条件1又满足条件2执行代码块2

......

练习:实现用while输出以下三角形

\'\'\'
    while 循环嵌套
    while 条件1:
          满足条件1执行代码块1
          满足条件2:
             满足条件1又满足条件2执行代码块
\'\'\'
# i = 0
# while i < 5:
#     print(\'这个是外循环的第%d遍\'%i)
#     m = 0
#     while m < 5:
#         print(\'这是里面循环的第%d遍\'%m)
#         m += 1
#     i += 1
#     print(\'_\'*20)

# i = 0
# while i < 5: #控制行数
#     m = 0
#     while m <= i:
#         print(\'*\',end = \'\') #end = \' \'表示print的结束符为空格 默认情况下是换行
#         m += 1
#     i += 1
#     print()#每行输出完之后输出一个换行 print()默认换行结束

while循环使用else语句

  while-else在条件语句为false时执行else语句块。

语法:

  while 条件:

    满足条件执行代码块

  else:

    不满足条件执行代码块

 

\'\'\'
    while循环
    
    while 条件:
          条件成立时执行的代码块
    else:
          条件不成立时执行的代码块
\'\'\'

# a = 0
# while a < 5:
#     print(\'爱你一万年\')
#     a+=1
# else: #当条件不成立时
#     print(a)
#     print(\'我是至尊宝\')

  让用户控制循环条件

  在使用循环的时候,让用户控制循环的结束,我们在其中定义一个退出值,主要用户输入的不是这个值,就继续循环,如果用户输入了退出值,那么程序就停止执行。

\'\'\'
    控制退出程序
\'\'\'
# while True:
#      flag = input(\'你是否要退出程序(y/n):\')
#      print(flag)
#      if flag == \'y\':
#          break

使用break退出循环

  在循环语句中使用break的作用是,在循环体内遇到break则会跳出循环,终止循环,并且不论循环的条件是否为真,都不再继续循环下去。

 如:

\'\'\'
    使用break退出程序  不管条件是否为真 都退出程序  
\'\'\'
# a = 0
# while a < 5:
#     if a == 3:
#         print(\'紫霞仙子说:别说话!吻我\')
#         break
#     print(\'至尊宝:爱你一万年\')
#     a += 1

循环中使用continue

  如果想要一种效果,退出当前循环,再继续执行下一次循环。就可以使用continue

 如:

\'\'\'
    break 退出整个循环 不管条件是否为真  
    continue跳出当前循环 直接执行下一次循环
\'\'\'
# a = 0
# while a <= 10:
#     a += 1
#     print(\'第%d圈开始\'%a)
#     print(\'好累哈\')
#     if a == 5:
#         print(\'趁老师不在,后半圈没跑\')
#         print()
#         continue
#     print(\'第%d圈结束\'%a)
#     print()

注意:continue和break常用于while和for循环中。

for语句

for语句一般语法

  for是Python中另外一个循环语句,提供了Python中最强大的循环结构,它可以循环遍历任何序列项目,如:一个列表或者一个字符串。(sequence可以是列表元组集合,如果是字典只能遍历keys,无法遍历values)

语法:

  for <variable> in <sequence>:

    <statements>

  else:

    <statements>

如:

\'\'\'
    for循环 Python中最强大的循环结构  不需要判断条件
    他可以循环遍历任何序列项目,如一个列表或者一个字符串
    
    for 变量 in 序列:
        执行的代码块
\'\'\'

# list01 = [\'joe\',\'susan\',\'jack\',\'tom\']
#遍历列表
# for i in list01:
    # print(i)
#while遍历
# i = 0
# while i < len(list01):
# print(list01[i])
# i += 1

  创建一个名为favorite_places的字典。在这个字典中,将三个人的名字用作键;对于其中的每个人,都存储他喜欢的1〜3个地方. 朋友指出他们喜欢的一个地方(input)。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。

# favorite_places = {\'张三\':[\'上海\',\'北京\',\'深圳\'],
#                    \'李四\':[\'张家界\',\'九寨沟\',\'鼓浪屿\']}
# name = input(\'请输入姓名:\')
# for i in favorite_places:
#     # print(i) #遍历字典输出key
#     if name == i: #遍历字典获取key 然后通过key和输入的值判断
#         print(favorite_places[name])

# favorite_places = {\'张三\':[\'上海\',\'北京\',\'深圳\'],
#                    \'李四\':[\'张家界\',\'九寨沟\',\'鼓浪屿\']}
# name = input(\'请输入姓名:\')
# for i in favorite_places.values(): #只获取value
#     print(i)
    # if name == i: #遍历字典获取key 然后通过key和输入的值判断
# print(favorite_places.items()) #获取key  value以列表的形式输出 key和value在一个元祖里面


# for k,v in favorite_places.items():
#     print(k,v)#打印出key以及对应的value

在for循环中使用break和continue

如:

\'\'\'
    for循环中使用break continue
\'\'\'
# list01 = [\'joe\',\'susan\',\'jack\',\'tom\']
# for i in list01:
#     if i == \'susan\':
#     #     break
#         continue
#     print(i)

# list01 = [\'joe\',\'susan\',\'jack\',\'tom\']
# for i in list01:
#     if i == \'susan\':
#     #     break
#     #     continue
#        pass #表示后面什么都不用操作了  占位  规范
#     print(i)

pass

  pass语句的使用表示不希望任何代码或者命令的执行;

  pass语句是一个空操作,在执行的时候不会产生任何反应;

  pass语句常出现在if、while、for等各种判断或者循环语句中;

range()函数-简介

  Python中range() 函数返回的是一个整数序列的对象,一般用在 for 循环中。

  函数语法

   range(start, stop[, step])

  参数说明

  start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

  end: 计数到 end 结束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

  step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

range()函数使用

如:

\'\'\'
    99乘法表
    1x1 = 1
    1x2 = 2 2x2 = 4
    1x3 = 3 2x3 = 6 3x3 = 9
\'\'\'
#补充知识点
# print(list(range(1,10))) #range 返回一个整数序列 左闭右开
# print(list(range(5)))
# print(list(range(0,10,2))) #2为步长

# 方法一
# for i in range(1,10):
#     # print(i)
#     for j in range(1,i + 1):
#         print(\'%d x %d = %d\'%(j,i,(j*i)),end = \' \')
#     print( )#以换行结尾

#方法二
# i = 1
# while i < 10: #控制行数
#     # print(i)#控制行
#     j = 1
#     while j <= i: #里面嵌套控制列
#         print(\'%d x %d = %d\' % (j,i,j*i),end = \' \')
#         j+=1
#     i+=1
#     print()

\'\'\'
    1-100求和
\'\'\'
#方法一
# i = 1
# sum = 0
# while i <= 100:
#     sum += i
#     i += 1
# print(sum)

#方法二
# sum = 0
# for i in range(1,101):
#     sum += i
#     print(i)
# print(sum)

\'\'\'
    从键盘输入一个字符串,将小写字母全部转化为大写字母
    将字符串以列表的形式输出(如果字符串包含整数,转化为整数)
\'\'\'
# str = input(\'请输入一个字符串:\') #接受一个字符串dhsbhf1234
# list = [] #定义一个空列表
# for i in str: #遍历字符串
#     # print(i)
#     #判断是否为数字 是的话转化为int  并追加到列表
#     if i.isdigit() == True: #isdigit()  isdecimal()  isnumeric()
#         list.append(int(i))
#     else:#不是数字则转化为大写 追加到list
#         list.append((i.upper()))
# print(list)#输出列表


\'\'\'
    随机输入8位以内的正整数,
    1、求他是几位数
    2、逆序打印出个位数字
\'\'\'
# num = input(\'请输入8位以内的正整数:\')
# if num.isdecimal():#首先判断是否为数字
#     if len(num) <= 8:
#         print(\'这个数是%d位数\'%len(num))
#         print(num[::-1])#切片
#     else:
#         print(\'输入有误\')
# else :
#     print(\'你输入的不是数字,请重新输入!\')

\'\'\'
    一个球中n米(自己输入)高度自由落下,每次落地后反弹回到原来高度的一般
    再次落下,求在第10次落地时共经过多少米?
\'\'\'
# h = 100
# sum = 0
# for i in range(1,11):
#     #第一次触地
#     if i == 1:
#         sum += h
#     else:
#         h /= 2 #第二次触地是前一次的一半
#         sum += h * 2 #再累加
# print(sum)

四、列表推导式

  列表推导式:列表推导式(list comprehension)是利用其它列表创建新列表的一种方式,工作原理类似for循环,即可对得到的元素进行转换变形 ,其基本格式如下(可以有多个for语句)

[expr for value in collection if condition]       expr可以使for循环的变量,也可以是表达式

  集合推导式:集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]。其基本格式如下:

{ expr for value in collection if condition }

 练习:

\'\'\'
    输入一行字符,分别统计出其中英文字母、空格、数字和其他字符出现的个数
    isalpha  isdigit isspace 
\'\'\'
# str = input(\'请输入字符:\')
# zf = 0
# num = 0
# space = 0
# other = 0
# for i in str :
#     if i.isdigit():
#         num += 1
#     elif i.isalpha():
#         zf += 1
#     elif i.isspace():
#         space += 1
#     else:
#         other += 1
# print(\'当前数字的个数是:%d,当前字符的个数是:%d,当前空格的个数是:%d,当前其他个数是:%d\' % (num,zf,space,other))

\'\'\'
    找出名字长度大于4的名字,组成列表打印出来
    过滤掉长度大于5的字符串列表,并将剩下的转化成大写字母
\'\'\'
names = [\'Tom\',\'Billy\',\'Jefferson\',\'Andrew\',\'Wesley\',\'Steven\',
         \'Joe\',\'Alice\',\'Jill\',\'Ana\',\'Wendy\',\'Jennifer\',\'Sherry\']

#方法一
# name = []
# for i in names:
#     if len(i) > 4:
#         name.append(i)
# print(name)

#列表推导式
# name = [i for i in names if len(i) > 4]
# print(name)

# name = [i.upper() for i in names if len(i) <= 5]
# print(name)

\'\'\'
    求出矩阵对应元素的和
\'\'\'

# m = [[1,2,3],
#      [4,5,6],
#      [6,7,8]]
# n = [[2,2,2],
#      [3,3,3],
#      [4,4,4]]

# for i in range(3):
#     for j in range(3):
#         print(m[i][j] + n[i][j])

#列表推导式
# num = [m[i][j] + n[i][j] for i in range(3) for j in range(3)]
# print(num)
#
# num = [m[i][j] * n[i][j] for i in range(3) for j in range(3)]
# print(num)

\'\'\'
    列表推导式
\'\'\'
#正常情况
# list = []
# for i in range(3,10):
#     if i % 2 == 0:
#         list.append(i)
# print(list)
#简写方式
# list = [i for i in range(3,10) if i % 2 == 0]
# print(list)

\'\'\'
    字典推导
\'\'\'
# list = [\'joe\',\'susan\',\'black\',\'joe\']
# dict = {k:v for k,v in enumerate(list)}
# print(dict)

# dict = {\'name\':\'joe\',\'age\':\'18\'}
# print(list(dict.items()))
# for k,v in dict.items():
#     print(k,v)


\'\'\'
    嵌套列表推导式
\'\'\'
name = [[\'Tom\',\'Billy\',\'Jefferson\',\'Andrew\',\'joe\'],
         [\'Alice\',\'Jill\',\'Ana\',\'Wendy\',\'Eva\']]
# print(names[0][1])
# list = []
# for i in range(0,2):
#     for j in name[i]:
#         list.append(j)
# print(list)

#嵌套推导式
# list = [j for i in range(0,2) for j in name[i] if len(j) > 4]
# print(list)

\'\'\'
    打印输出所有的“水仙花数”
    “水仙花数”是指依一个三位数,其各位数字立方和等于该数本身
\'\'\'
#利用for循环控制遍历100-999,每个数字分解出个位,十位,百位
#然后分别**3 然后相加 判断  是否等于本身


#例如:
# num = 153
#取百位
# print(num//100)
#取十位
# print(num%100//10)
#取个位
# print(num%100%10)


# for i in range(100,1000):
#     x = i // 100
#     y = i % 100 //10
#     z = i % 100 % 10
#     if i == x**3 + y**3 + z**3 :
#         print(i)

\'\'\'
    打印菱形
\'\'\'
# i = \'*\'
# j = \'***\'
# m = \'*****\'
# n = \'*******\'
# print(i.center(7))
# print(j.center(7))

#方法一
# for i in range(1,7,2):
#     print((\'*\'*i).center(7))
# for j in range(7,0,-2):
#     print((\'*\' * j).center(7))

#方法二
# for i in range(1,8,2):
#     print((\'*\'*i).center(7))
#     if i == 7:
#         for j in range(5,0,-2):
#             print((\'*\' * j).center(7))

\'\'\'
    一个5位数 判断是否是回文数 即12321
\'\'\'
# num = input(\'请输入一个5位数:\')
# if num[0] == num[4] and num[1] == num[3]:
#     print(\'%s是回文数\'%num)
# else:
#     print(\'%s不是回文数\'%num)

#推广
# num = input(\'请输入一个数字:\')
# if num == num[::-1]:
#     print(\'%s是回文数\'%num)
# else:
#     print(\'%s不是回文数\'%num)

\'\'\'
    求一个3*3矩阵对角线元素之和
\'\'\'
# m = [[1,2,3],
#      [4,5,6],
#      [7,8,9]]
# x = 0
# y = 0
# for i in range(3):
#     x += m[i][i]
#     y += m[i][2-i]
# print(x)
# print(y)

五、内置函数

内置函数(可通过dir(__builtins__)查询)

下面列出的是常用的,红色标注的是使用频率更高的

练习:
\'\'\'
    有四个数字:1、2、3、4能组成多少个互不相同并且没有重复数字的三位数?各是多少?
\'\'\'
# for x in range(1,5):
#     for y in range(1,5):
#         for z in range(1,5):
#             if x != y and x != z and y != z:
#                 print(x * 100 + y * 10 + z)

# num = [x * 100 + y * 10 + z for x in range(1,5) for y in range(1,5) for z in range(1,5) if x != y and x != z and y != z]
# print(num)

\'\'\'
    将列表用for循环添加到另外一个字典中
\'\'\'
# names = [\'Tom\',\'Billy\',\'Joe\',\'Andrew\',\'Wesley\',\'Steven\',\'Alice\',\'Eva\']
# print(list(enumerate(names)))
# name = {k:v for k,v in enumerate(names)}
# print(name)

\'\'\'
    设置一组账号和密码不少于两个
    通过输入账号和密码,如果输入正确则显示登录成功
    若账号或密码输入错误则显示登录失败
    对多可以输入三次
\'\'\'
# user = {\'joe\':\'123456\',\'jack\':\'6543321\',\'black\':\'455789\'}
#
# for i in range(3):
#     name = input(\'请输入您的用户名:\')
#     pwd = input(\'请输入您的密码:\')
#     if name in user:
#         if pwd == user[name]:
#             print(\'登录成功!\')
#             break
#         else:
#             if i == 2:
#                 print(\'您的账号已经冻结\')
#                 break
#             print(\'您的密码有误!\')
#     else:
#         if i == 2:
#             print(\'您的账号已经while冻结\')
#             break
#         print(\'您输入的账号有误!\')

\'\'\'
    求阶乘 用while 和 for 分别实现
\'\'\'

# num = int(input(\'请输入你要计算的数字:\'))
# i = 1
# det = 1
# while i <= num :
#     det *= i
#     i += 1
# print(det)
# print(\'数字%d:的阶乘是%d:\' % (num,det))

# num = int(input(\'请输入你要计算的数字:\'))
# det = 1
# for i in range(1,num + 1):
#     det *= i
# print(det)

\'\'\'
    冒泡排序
\'\'\'
list01 = [2,6,4,9,3,10]
# for i in range(len(list01)):
#     for j in range(1,len(list01) - i):
#         if list01[j] > list01[j-1]:
#             list01[j],list01[j-1] = list01[j-1],list01[j]
# print(list01)

# for i in range(len(list01)):
#     for j in range(1,len(list01) - i):
#         if list01[j] < list01[j-1]:
#             list01[j],list01[j-1] = list01[j-1],list01[j]
# print(list01)

以上是关于Python之路-条件控制与循环语句的主要内容,如果未能解决你的问题,请参考以下文章

07_Python的控制判断循环语句1(if判断for循环)_Python编程之路

Python条件控制语句与循环控制语句

Python条件控制与循环语句

python 条件控制与 循环

python基础之条件控制与循环

Python学习之路--03流程控制语句