003_流程控制语句

当我们在工作中会发现:有的工作就是一个动作序列从头至尾执行就完成任务了,有的工作是根据不同的情况进行不同的处理,有的工作则是简单机械的重复某个或者某些工作序列。而计算机在执行某个具体问题时,也可以包括三种情形。即顺序执行所有的语句、选择执行部分语句和循环语句,刚好对应程序设计中的三种程序执行结构流程:顺序结构、选择结构和循环结构。

1. 用if选择执行语句

1.1 if基础

if语句的作用是选择执行语句,其简单的形式如下:

if <条件>:
	<语句>
else:
	<语句>

其基本语义是当条件为真时,执行其后的语句;当条件为假时,跳过其后缩进的语句;
其中的条件可以是任意类型的表达形式。
注意:条件后必须有“:”

例:

x = input('please input a integer:')    # 输入一个整数
x = int(x)                              # 字符串转换成整型
if x < 0:                               # x<0条件成立执行其后的语句
    x = -x
print(x )                               # 输出x的值

1.2 if....elif 语句

语法格式:

if <条件1>:
	<语句1>
elif <条件2>:
	<语句2>
elif <条件3>:
	<语句3>
...
else:
	<语句n>

例:演示一个具有多个条件分支的if语句使用:

x = input('请输入你的总分数:')
x = float(x)
if x >= 90:
    print('你的成绩为:优')
elif x >= 80:
    print('你的成绩为:良')
elif x >= 70:
    print('你的成绩为:中')
elif x >= 60:
    print('你的成绩为:合格')
else:
    print('你的成绩为:不合格')

1.3 if语句的嵌套

语法格式:

if <条件>:
	if <条件>:
		<语句1>
	elif <条件>:
		<语句2>
else:
	<语句3>

例:

a = int(input('请输入一个整数:'))
if a>0:
    if a>10000:
        print('无法表示')
    else:
        print('可以表示')
    print('且大于0')
else:
    if a<-10000:
        print('无法表示')
    else:
        print('可以表示')
    print('且小于0')

2. 循环语句

2.1 用while循环执行执行语句

2.1.1 while 基础

语法格式:

while <条件>:
	<语句1>
else:
	<语句2>

while 语句只有在测试条件为假的时候才会停止。在while语句的循环体中一定要包含改变测试条件的语句,以保证循环能够正常运行,避免死循环出现;
while语句包含与if语句相同的条件测试语句,如果条件为真就执行循环体,如果条件问假,就终止循环

例1:模拟超时购物系统

total = 0
while True:
    # 先买
    price = float(input('输入价格:'))
    number = int(input('输入数量:'))
    # 累加
    total += price * number

    # 判断是否继续购买
    answer = input('当前商品总额:%.2f,是否继续添加商品(q表示退出)?' % total)
    if answer == 'q':
        break  # 跳出循环
print('所有商品的总额是:%.2f' % total)

例2:猜数字

'''
产生随机数,random.randint(start,end)
可以猜多次,直到猜对为止,如果猜错了,适当提示一些
统计猜了多少次
如果1次就中:赶紧买彩票吧,运气爆棚!!!
2-5次猜中:猜对了,运气还可以哦!
6次以上,猜对了,运气一般啊!!!
'''
import random
ran = random.randint(1,50)
count = 0

while True:
    guess = int(input('请输入你猜的数:'))
    count += 1
    if guess == ran:
        if count == 1:
            print('赶紧买彩票吧,运气爆棚!!!')
        elif 2 <= count <=5:
            print('猜对了,运气还可以哦!')
        else:
            print('猜对了,运气一般啊!!!')
        break
    elif guess > ran:
        print('太大了,猜小一点!!!')
    else:
        print('太小了,猜大一点!!!')

2.2 用for循环执行语句

语法格式:

for 循环变量 in 遍历对象:
	语句1
else:
	语句2 

for语句的语义是遍历for语句中的遍历对象,每次循环,循环变量会则得到遍历对象中的一个值,你可以在循环体重处理它:一般情况下,当遍历对象中的值全部用完时,它就会自动退出循环,语句1就是for语句的循环体,它的执行次数就是遍历对象中的值的数量,else语句中的语句2 只有在循环正常退出(遍历完遍历对象中的值)时退出

例:演示一个基本的for循环结构

for i in [1,2,3,4,5]:
    print(i,'的平方是:',i*i)
else:
    print('循环结束!')

执行结果: 
1 的平方是: 1
2 的平方是: 4
3 的平方是: 9
4 的平方是: 16
5 的平方是: 25
循环结束!

Process finished with exit code 0

2.2.1 for语句与break语句、continue语句

break语句作用是中断循环的执行,如果在for循环中执行了break,for语句的遍历就会立刻终止,即使还有未遍历完的数据,还是会立即终止for循环。
continue 语句作用是提前停止循环体的执行,开始下一轮循环,在for语句中如果执行了continue语句,则continue语句后的循环体语句不会被执行,即提前结束了本次循环,然后进入下一个遍历。

例:演示break和continue语句的作用,


for i in [1,2,3,4,5]:
    print(i)
    if i == 2:      # 当i等于2时,执行其后缩进的continue语句
        continue    # 执行本语句后其后的if语句和print()不会执行
    print(i,'的平方是:',i*i)
    if i ==4:       # 当i等于4时,执行其后缩进的break语句
        break       # 执行本语句后,循环终止
else:               # 因为for循环中的break语句执行中断了for循环
    print('循环结束!')  # 该语句不会执行

执行结果
1
1 的平方是: 1
2
3
3 的平方是: 9
4
4 的平方是: 16

2.2.2 for语句与range()函数

for语句中的对象可以是集合、列表、字典、以及元组等,也可以通过range()函数产生一个整数列表,以完成计数循环。range()函数的原型如下:

range([start,] stop [,step])

参数函数:

  1. start:可选参数,起始数,默认为0
  2. stop:终止数,如果range只有一个参数x,那么range生成的一个从0~x-1的整数列表:
  3. step:可选参数,步长,即每次循环序列增长值。

注意:产生的整数序列数的最大值为stop-1

例:用for语句和range()函数构建的两个循环体的语句的代码

print('第一次循环输出:')
for i in range(4):
    print(i)
print('第二次循环输出:')
for i in range(0,7,2):
    print(i)

输出结果:
第一次循环输出:
0
1
2
3
第二次循环输出:
0
2
4
6

range()函数并不是一直在调用时,一次生成整个序列,而是遍历一次才产生一个值,以减少内存的占用,其本质是一个迭代器

2.2.3 for语句的嵌套

同if语句一样,for语句也是可以嵌套的

例:计算并输出由用户指定的两个整数之间所有的素数

# 输入两个整数,并放入一个元组中
x = (int(input('请输入开始值(整数):')),int(input('请输入结束值(整数):')))

x1 = min(x)     # 获取两个数的最小值
x2 = max(x)     # 获取两个数的最大值
for n in range(x1,x2+1):        # 用range函数产生一个从x1~x2的序列
    for i in range(2,n-1):      # 用range产生从2至当前值n-1的序列
        if n % i == 0:          # 如果余数为0,则执行其后缩进的break语句,中断内循环
            break
    else:                       # 循环中断,则表明至少有一个整数因子,不是素数,不输出
        print(n,"是素数。")

执行结果:x1=1,x2=20
请输入开始值(整数):1
请输入结束值(整数):20
1 是素数。
2 是素数。
3 是素数。
5 是素数。
7 是素数。
11 是素数。
13 是素数。
17 是素数。
19 是素数。

强化训练:游戏-掷色子

'''
游戏:掷色子
两个:1-6
1. 玩游戏要有金币,没有不能玩
2. 玩游戏赠金币1枚,充值也可以获取金币
3. 10的倍数充值,20个金币
4. 玩游戏消耗5个金币
5,猜大小:猜对鼓励金币2枚,猜错没有奖励
6. 游戏结束:1主动退出 2没有金币退出
7. 只要退出则打印金币数,和共玩了几局
'''

import random

# 起始金币数
coins = 0

# 计数器
count = 0

if coins <= 5:
    # 提示充值
    print('金币不足,请充值!')
    while True:
        money = int(input('请输入充值金额:'))
        # 10元的倍数,20个金币
        if money % 10 == 0:
            coins += money // 10 * 20
            print('充值成功!当前金币有%d个' % coins)
            # 开始游戏
            print('~~~~~~~~~~游戏开始~~~~~~~~~~~')
            answer = input('是否开始游戏(y/n)')
            while coins > 5 and answer == 'y':
                # 扣金币
                coins -= 5
                # 赠金币
                coins += 1
                # 产生两个骰子的随机数
                ran1 = random.randint(1, 6)
                ran2 = random.randint(1, 6)
                # 猜大小
                guess = input('洗牌成功,请猜大小:')
                # 判断比较
                if guess == '大' and ran1 + ran2 > 6 or guess == '小' and ran1 + ran2 <= 6:
                    print('恭喜你猜对了,你赢了')
                    coins += 2
                else:
                    print('很遗憾,你猜错了')
                # 玩的次数
                count += 1
                answer = input('是否继续游戏(y/n)')
            # 打印次数,剩余金币
            print('共玩了%d次,剩余金币:%d' % (count,coins))
            break
        else:
            print('不是10的倍数,充值失败!')

posted @ 2022-04-19 13:26  锦书致南辞  阅读(33)  评论(0编辑  收藏  举报