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])
参数函数:
- start:可选参数,起始数,默认为0
- stop:终止数,如果range只有一个参数x,那么range生成的一个从0~x-1的整数列表:
- 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的倍数,充值失败!')