流程控制

流程控制

1. 选择语句

选择语句也可以称为判断语句

在我们丰富多彩的生活中,我们要做出各种各样的选择:如果…,那么…

这种判断几乎无处不在,那么什么是判断语句呢?

判断的定义:

如果条件满足,才能做某件事

如果条件不满足,就做另外一件事情,或者什么也不做

最开始的程序只能从上到下的‘呆板’执行,正是有了判断,才使得程序充满变化

可以通过下图来简单了解语句的执行过程:
在这里插入图片描述

在python编程语言中,没有case语句,只有if语句。而if语句又有三种形式:

(1) if语句

(2) if…else…语句

(3) if…elif…else语句

if 语句:

if 判断条件:
    执行语句……

例子:

# 判断年龄是否满18岁,若满足,请输出提示语句
# 1. 定义一个变量
age = 20
# 2. 判断是否满18岁
if age >= 18:
# 3. 如果你满18岁,可以进入网吧
	print("欢迎进入网吧")

*注意:*这里的判断条件应使用比较运算符 >=,(提问比较运算符都有什么)


在使用 if 判断时,只能做到满足条件时要做的事情,那如果需要在不满足条件的时候,该做某些事情,我们该如何做呢

这时就需要用到if…else…语句

if…else…语句:

if 判断条件:
    执行语句……
else:
    执行语句……

注意:

  • else必须配合if使用,而其 else 后不跟条件,else总与离它最近的if进行匹配。
  • if和else语句以及各自的缩进部分是一个完整的代码块

例子:

# 判断年龄是否满 18 岁,如果满 18 岁,允许进入网吧,如果未满 18 岁,提示回家写作业
# 1. 定义一个变量
age = 13
# 2. 判断是否满18岁
if age >= 18:
# 3. 如果你满18岁,可以进入网吧
	print("欢迎进入网吧")
else:
    print("未满 18 岁, 回家写作业")

在开发中,使用if可以判断条件,使用else可以处理条件不成立的情况

但是,如果希望再增加一些不同条件,需要执行的代码也不同,

由于 python 并不支持 switch 语句,所以多个条件判断,只能用 elif 来实现

if…elif…else…语句

if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……
# -*- coding: UTF-8 -*-
# 例2:elif用法
 
num = 5     
if num == 3:            # 判断num的值
    print ('boss')        
elif num == 2:
    print ('user')
elif num == 1:
    print ('worker')
elif num < 0:           # 值小于零时输出
    print ('error')
else:
    print ('roadman')     # 条件均不成立时输出

*注意:*elif 和 else 都必须和 if 联合使用,而不能单独使用,可以将 if,elif 和 else 以及各自缩进的代码,看成一个完整的代码块。


在if判断语句中,除了使用比较运算符进行判断,有时还会用到逻辑运算符:与(and),或(or),非(not)

如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。

# -*- coding: UTF-8 -*-
 
# 例3:if语句多个条件
# num = int(input("输入您需要判断的数字"))  手动输入需要判断数字


# and 与
# 判断值是否在0~10之间
num = 9
if num >= 0 and num <= 10:    
    print ('hello')
# 输出结果: hello
 

# or 或
# 判断值是否在小于0或大于10
num = 10
if num < 0 or num > 10:    
    print ('hello')
else:
    print ('undefine')
# 输出结果: undefine


# not 非 对一个条件取反
# 定义一个布尔变量,判断是否是本公司职员
is_employee = True
if not is_employee:
    print("非本公司职员")
 
num = 8
# 判断值是否在0~5或者10~15之间
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):    
    print ('hello')
else:
    print ('undefine')
# 输出结果: undefine

*注意:*当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于>(大于)、<(小于)等判断符号,即:逻辑运算优先级低于条件运算

  • 综合应用

    石头剪刀布

    import random
    
    # 从控制台输入要出的拳:1、石头  2、剪刀  3、布
    player = int(input("请输入您要出的拳头:"))
    computer = random.randint(1,3)
    print("玩家的选择是%d, 电脑的选择是%d"%(player, computer))
    if (player == 1 and computer == 2) or \
        (player ==2 and computer == 3) or \
            (player == 3 and computer == 1):
        print("恭喜玩家获胜")
    elif player == computer:
        print("无胜负,平局~")
    else:
        print("电脑获胜")
    
练习题
  • 输入一个数,判断它是否能被3或5或7整除
  • 打印某年某月有多少天。
  • 做学院评奖系统,
    1)如果数学成绩大于80分并且语文成绩大于80分,获奖学金500元。
    2)如果数学小于30并且语文小于30分,输出重修。
  • 输入三个数,如果其中有一个值大于1000,则提示,输入的数值有大于1000的。
  • 定义一个字符,判断是否为字母。
  • 定义一个整数,计算其平方值和立方值。
  • 定义一个大 写字母,把它转换为小写字母后显示出来。
  • 一位学生参加了三门不同科目的考试,计算并显示所得的总分和平均分同时显示单科所得分数。
  • 定义三个数a=10,b=20,c=30 a+=10;b-=4; c%=2; 输出a b c 的结果
  • 定义三个数,求出其中的最大值
  • 某超市为了促销,规定:购物不足50元的按原价付款,超过50不足100的按九折付款,
    超过100元的,超过部分按八折付款。编一程序完成超市的自动计费的工作。

答案 1

a = int(input("一个数:"))
if a % 3 == 0:
    print("被3整除了")
elif a % 5 == 0:
    print("被3整除了")
elif a % 7 == 0:
    print("被3整除了")

a = int(input("一个数:"))
if a % 3 == 0 or a % 5 == 0 or a % 7 == 0:
    print("可以整除了")

答案2

测试
  • 标识符命名规则

  • 定义变量 a = 100 计算 a **= 2 的值

  • 输入一个大写字母,把它转换为小写字母后显示出来。

  • 小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:低于18.5:过轻 ,18.5-25:正常 ,25-28:过重 ,28-32:肥胖 ,高于32:严重肥胖

  • 有两个2到99之间的整数,a知道这两个数的和,b知道这两个数的积。
    第一句:a对b说:我不知道这两个数是多少,但我确信你也不知道。

    第二句:b说:我知道了。
    第三句:a说:我也知道了。

2. 循环语句

当我们需要执行一个语句或者语句组多次,不可能将同样的语句写多遍,一是比较繁琐, 二是不利于维护,这时候循环语句就应运而生。其中循环语句又分for循环和while循环,循环语句执行流程如下图:

在这里插入图片描述

for循环

for循环的一般格式如下:

for 变量 in 序列:
    循环体

例子:

# 循环字符串
name = "zhangsan"
for word in name:
    print(word)

# 循环列表
name_list = ['张三', '李四', '王五']
for name in name_list:
    print(name)

range()函数:如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列,例如:

# 基础循环
for i in range(5):
	print(i)

# 使用range指定区间的值
for i in range(5,9):
    print(i)
    
# 使range以指定不同的增量(可以为负数,又称步长)
for i in range(0, 10, 3):
    print(i)
    
# 注意:0为起始值,10为终止值,3为步长。隐藏代码:i<终止值


# 还可以使用range()函数来创建一个列表
print(list(range(5)))

用*画三角形:

*
**
***
****
*****

for i in range(5):
    for j in range(i+1):
        print("*",end="")
    print()
    
*****
****
***
**
*

for i in range(5):
    for j in range(5-i):
        print("*",end="")
    print()
    
    *
   **
  ***
 ****
*****

for i in range(5):
    for j in range(4 - i):
        print(" ",end="")
    for j in range(i+1):
        print("*",end="")
    print()
    
***** 
****  
***   
**    
*     

for i in range(5):
    for j in range(5 - i):
        print("*",end="")
    for j in range(i+1):
        print(" ",end="")
    print()

九九乘法表:

for i in range(1,10):
    for j in range(1,i+1):
        print(j, "*", i, "=", j*i, end=" ")
    print()

while循环

  1. while循环的一般格式如下:
起点
while 表达式(bool)/终点:
    循环体
    步长
# 使用 while 来计算 1 到 100 的总和
n = 100
 
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
 
print("1 到 %d 之和为: %d" % (n,sum))

>> 1100 之和为: 5050

*注意:*在python中没有do…while

  1. 无限循环:通过设置条件表达式永远不为 false 来实现无限循环
var = 1
while var == 1 :  # 表达式永远为 true
   num = int(input("输入一个数字  :"))
   print ("你输入的数字是: ", num)
 
print ("Good bye!")
  1. while循环使用else语句: 在 while … else 在条件语句为 false 时执行 else 的语句块
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

break

break 语句可以跳出 for 和 while 的循环体

# 第一个实例
for letter in 'Runoob':
   if letter == 'b':
      break
   print ('当前字母为 :', letter)
  
# 第二个实例
var = 10 
while var > 0:              
   print ('当期变量值为 :', var)
   var = var -1
   if var == 5:
      break
 
print ("Good bye!")

continue

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

# 第一个实例
for letter in 'Runoob':
   if letter == 'o':        # 字母为 o 时跳过输出
      continue
   print ('当前字母 :', letter)

# 第二个实例
var = 10
while var > 0:              
   var = var -1
   if var == 5:             # 变量为 5 时跳过输出
      continue
   print ('当前变量值 :', var)
print ("Good bye!")

else

循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行

# 质数:在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n//x)
            break
    else:
        # 循环中没有找到元素
        print(n, ' 是质数')
练习题
  • 盈盈为了考验令狐冲夺冠的决心,要他说一百遍“我能行!”
  • 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。
    计算5年后,获得的本金是多少?(用float存储)
  • 计算出1—100之间所有能被3整除的整数的和?
  • 计算1000以内所有不能被7整除的整数之和?
  • 1+2+3+…+100 = ?
  • 找出一个数的所有因子数
  1. 定义一个正整数如:1205 统计它的各位数字中零的个数,并求各位数字中的最大者。
  2. 有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,
    问几天以后能卖完
  3. 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,
    第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。
    到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
  4. 循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,
    停止录入并提示录入错误(使用break)
  • 循环录入Java课的学生成绩,统计分数大于等于 80分的学生比例(使用continue)
  1. 用while做鸡兔同笼。鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?
    要求鸡兔至少一样一只。
  • 计算2 / 1 + 3 / 2 + 4 / 3 +…+(n + 1) / n,写出算法的程序.
  1. 有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。
    已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。
    假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?
    分析:兔子的规律为数列,1,1,2,3,5,8,13,21
  • 从控制台输入一个正整数,并进行反转输出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值