原文地址:https://blog.csdn.net/longteng007/article/details/50991807
输入:三个数值
处理:三者最大算法
输出:打印最大值
① 通盘比较 — 将每一个值与其他所有值比较以确定最大值
三个值的情况比较简单,如果是五值比较复杂,而且效率低
(因为表达式没有被充分利用)
② 决策树 — 避免冗余比较
结构更加复杂!
③ 顺序处理 — 逐个扫描每个值,保留最大者
【程序】程序9:
# program: maxn.py
# 寻找一组数中的最大值
def main():
n = eval(input("How many numbers are there?"))
# 将第一个值赋值给max
max = eval(input("Enter a number >>"))
# 连续与后面n-1值进行比较
for i in range(n-1):
x = eval(input("Enter a number >>"))
if x > max:
max = x
print("The largest value is", max)
main()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
【运行结果】
How many numbers are there? 5
Enter a number >> 9
Enter a number >> 6
Enter a number >> 3
Enter a number >> 10
Enter a number >> 20
The largest value is 20
④ 使用Python内置函数max()
3.5 基本循环结构
(1)for循环
Python可以使用for语句循环遍历整个序列的值,格式如下:
for <var> in <sequence>:
<body>
- 1
- 2
在for循环中,循环变量var遍历了队列中的每一个值,循环变量var遍历了队列中的每一个值,循环语句体为每个值执行一次
例:for循环求平均数
- IPO:
输入:待输入数字个数,数字
处理:平均数算法
输出:平均数
通用设计方案:
- ① 输入数字的个数n
- ② 将sum初始化为0
- ③ 循环n次:
- 输入数字x
- 将x加入sum中
- ④ 将sum/n作为平均数输出出来
- 程序10:
#average1.py
n = eval(input("How many numbers?"))
sum = 0.0
for i in range(n):
x = eval(input("Enter a number >>"))
sum = sum + x
print("\nThe average is", sum/n)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
【运行结果】
How many numbers? 3
Enter a number >> 5
Enter a number >> 7
Enter a number >> 6
The average is 6.0
for循环的缺点:
程序开始时必须提供输入数字总数,以提供固定循环次数
大规模数字则需要用户数清楚个数
为此,Python提供了另一种循环模式即无限循环,不需要提前知道循环次数
(2)while循环
语句格式:
while <condition>
<body>
- 1
- 2
条件总是在循环体执行之前被判断,这种结构又被称为前测循环(当型循环)
如果循环体没有对i初始化或循环体没有累加,条件判断一直为真,循环体将一直执行,即为死循环程序,这时通常使用Ctrl+C来终止一个程序
(3)break语句 —— 退出循环
例:程序11:
#TestBreak.py
sum = 0
number = 0
while number < 20:
number += 1
sum += number
if sum > 100:
break
print("The number is", number)
print("The sum is", sum)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
【运行结果】
The number is 14
The sum is 105
(4)continue — 结束本次循环
即跳出循环体中下面尚未执行的语句,对于while循环,继续求解循环条件;对于for循环,继续遍历循环列表
continue语句和break语句的区别:
continue语句只结束本次循环,而不终止整个循环的执行,而break语句则是直接结束整个循环流程,不再判断循环条件是否成立
(5)循环语句中的else — 不满足循环条件时执行
3.6 通用循环构造方法
(1)交互式循环
交互式循环是无限循环的一种,允许用户通过交互的方式重复程序特定部分
(2)哨兵循环
执行循环直到遇到特定的值,循环语句才终止执行
设计方法:
① 设定一个哨兵值作为循环终止的标志
② 任何值都可以做哨兵,但要与实际数据有所区别
(3)文件循环
面向文件的方法是数据处理的典型应用,可以事先将数据录入到文件,便于编辑修改,python中采用readline()方法中的end of file循环模式
(4)循环嵌套
决策和循环互相嵌套可以实现复杂算法,假设数字以逗号分隔出现在文件的同一行上
(3)(4)整合程序如图:
3.7 死循环和循环嵌套
(1)死循环 — 无法靠自身的控制中止的循环
死循环的使用:通过死循环可以一直检测捕捉特定异常
(2)后测循环(直到型循环)
先接受输入,再判断循环条件是否满足。在Python中没有后测循环语句,但可以通过while和break语句间接实现,如:
(3)半路循环 — 循环判断条件在循环体的中部
例:
3.8 布尔表达式
条件语句和循环语句都使用布尔表达式作为条件
布尔值为真(True)或假(Flase)
(1)布尔操作符:and,or,not
and和or用于组合两个布尔表达式,并产生一个布尔结果
<expr> and <expr>
<expr> or <expr>
- 1
- 2
not运算符计算一个布尔表达式的反值
not <expr>
- 1
(2)布尔操作符的优先级:not > and > or
例:壁球比赛计分:
- 假设scoreA和scoreB代表两个壁球选手的分数
- 规则1:只要一个选手达到了15分,本场比赛就结束
- 即: scoreA == 15 or scoreB == 15
- 在程序中构造一种循环条件,对游戏结束条件取反,只要比赛还没有结束游戏就一直进行下去
- 即: while not( scoreA == 15 or scoreB == 15 ) # 比赛继续
- 规则2:如果一方打了七分而另一方一分未得时,比赛也结束
- 即:scoreA == 15 or scoreB == 15 or (a == 7 and b == 0) or (b == 7 and a == 0)
- 需要一个团队赢得至少两分才算赢,即其中一个队已经达到了15分,且分数差异至少为2时比赛结束(排球)
- 即:(a >= 15 or b >= 15) and abs(a-b)>=2
- 规则1:只要一个选手达到了15分,本场比赛就结束
(3)布尔代数: 布尔表达式遵循特定的代数定律,这些规律被称为布尔逻辑或布尔代数
代数 | 布尔代数 |
---|---|
a*0 = 0 | a and false == false |
a*1 = a | a and true == a |
a+0 = 0 | a or false == a |
① 任何数据和true进行or操作都是真
② and和or操作符都符合分配率
③ not操作符可负负抵消
④ 德摩根定律:not放进表达式后,and和or发生变化
如:not(a or b) == (not a) and (not b)
not(a and b) == (not a) or (not b)