Python Class 03-程序的控制结构

简介: Python Class 03-程序的控制结构

程序的分支结构

单分支结构 if

1. #单条件判断
2. s = eval(input("请输入一个整数:"))
3. if s % 2 == 0:
4. print("%d是偶数。" % s)
1. #多条件判断
2. s = eval(input("请输入一个整数:"))
3. if s % 3 == 0 and s % 5 == 0:
4. print("%d既能被3整除,又能被5整除。" % s)

二分支结构 if-else

1. s = eval(input("请输入一个整数:"))
2. if s % 3 == 0 and s % 5 == 0:
3. print("%d既能被3整除,又能被5整除。" % s)
4. else:
5. print("%d不能同时被3和5整除。" % s)
1. s = eval(input("请输入一个整数:"))
2. token = ""if s % 3 == 0 and s % 5 == 0 else "不"
3. print("{}{}能同时被3和5整除。" .format(s, token))

多分支结构 if-elif-else  成绩分级   注意逻辑先后顺序关系

1. score = eval(input("请输入一个百分制成绩:"))
2. if score >= 90.0:
3.     grade = 'A'
4. elif score >= 80.0:
5.     grade = 'B'
6. elif  score >= 70.0:
7.     grad = 'C'
8. elif grad >= 60.0:
9.     grad = 'D'
10. else:
11.     grad = 'E'
12. print("对应的五分制成绩是:{}".format(grad))

判断条件及组合 >、>=、<、<=、==、!=、and、or、not

1. >>> 4<5
2. True
3. >>> 'Pyhon'>'python'
4. False
5. >>> 0==False
6. True
7. >>> ''==True
8. False
9. >>> not True
10. False
11. >>> a=80
12. >>> (a>100)or(a>50 and a<90)
13. True
14. >>>

示例分析1:多分支程序示例。根据月份计算该月的天数(不考虑闰年的情况)。

1. month = eval(input("请输入您选择的月份:"))
2. days = 0;
3. if (month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12):
4. 
5.     days = 31
6. elif (month == 4 or month == 6 or month == 9 or month == 11):
7.     days = 30
8. else:
9.     days = 28
10. print("{}月份的天数是{}天。".format(month, days))

示例分析2:多分支嵌套示例。例如,一个计算购书款的程序。如果有会员卡,购书5本以上,书款按7.5折结算,5本以下,按8.5折结算:如果没有会员卡,购书5本以上,书款按8.5折结算,5本以下,按9.5折结算。

1. flag = 1
2. books = 8
3. price = 234
4. actualpay = 0
5. 
6. if flag == 1:
7. if books >= 5:
8.         actualpay = price * books * 0.75
9. else:
10.         actualpay = price * books * 0.85
11. else:
12. if books >= 5:
13.         actualpay = price * books * 0.85
14. else:
15.         actualpay = price * books * 0.95
16. print("您的实际付款金额是:{}".format(actualpay))

小作业:

1、输人一个年份,输出是否为闰年。#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。

2、输入三个整数,按从大到小的顺序输出。

3、输入温度t的值,判断是否适合晨练。(25<=t<=30,则适合晨练ok,否则不适合no)

4、乘坐飞机时,当乘客行李小于等于20公斤时,按每公斤1.68元收费,大于20公斤时,按每公斤1.98元收费,编程计算收费(保留2位小数)。

5、根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday、input  error!

6、一个最简单的计算器支持+,-,*,/四种运算。输入只有一行:两个参加运算的数和一个操作符(+,-,*,/)。输出运算表达式的结果。

考虑下面两种情况:(1)如果出现除数为0的情况,则输出:Divided by zero!  (2)如果出现无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!

输入样例:34  56  +  输出样例:90

7、期末来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。

【分析】对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x div 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完: 若买完x div 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x div 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。

程序的循环结构

遍历循环 for

1. >>> for i in "python":
2.  print(i)
3. p
4. y
5. t
6. h
7. o
8. n
9. >>> for i in range(5):
10.   print(i)  
11. 0
12. 1
13. 2
14. 3
15. 4
1. #for循环与else
2. for i in 'py':
3. print("循环执行中:" + i)
4. else:
5. print("循环正常结束")

无限循环 while

1. >>> n=0
2. >>> while n<10:
3.  print(n)
4.  n=n+3 
5. 0
6. 3
7. 6
8. 9

循环示例1:将一个列表中的元素进行头尾置换,即列表中第1个元素和倒数1个元素交换,第2个元素和倒数第2个元素交换,依次进行,最后打印输出列表。

1. lst = [1, 3, 7, -23, 34, 0, 23, 2, 9, 7, 79]
2. 
3. #用while循环做翻转
4. head = 0
5. tail = len(lst) - 1
6. while head < len(lst) / 2:
7.     lst[head], lst[tail] = lst[tail], lst[head]
8.     head += 1
9.     tail -= 1
10. for i in lst:
11. print(i, end = " ")
12. print()
13. 
14. #用for循环做翻转
15. tail = len(lst) - 1
16. n = int(len(lst) / 2)   
17. for i in range(0,n):
18.     lst[i], lst[tail-i] = lst[tail-i], lst[i]
19. for i in lst:
20. print(i, end = " ")
21. print()

循环示例2:使用嵌套循环计算1!+2+...+n!。

1. n = eval(input("请输入正整数n:"))
2. 
3. #for循环嵌套
4. s = 0
5. for i in range(1, n + 1):
6.     t = 1
7. for j in range(1, i + 1):
8.         t *= j
9.     s += t
10. print(s)
11. 
12. #while循环嵌套
13. s = 0
14. i = 1
15. while i <= 10:
16.     t = 1
17.     j = 1
18. while j <= i:
19.         t *= j
20.         j += 1
21.     s += t
22.     i += 1
23. print(s)

循环当中的else语句:

1. #while和else 正常循环结束执行else 如果有break也会跳过else
2. s, idx = 'PYTHON', 0
3. while idx < len(s):
4. print("循环执行中:" + s[idx])
5.     idx += 1
6. else:
7. print("循环正常结束")
8. 
9. #二重循环中的else语句:将100以内的素数加入列表
10. num = []
11. i = 2
12. for i in range(2, 100):
13.     j = 2
14. for j in range(2, i):
15. if i % j == 0:
16. break
17. else:
18.         num.append(i)
19. print(num)

循环控制 break 和 continue

1. #单循环 break跳出循环
2. while True:
3.     s = input("请输入一个名字(按Q退出):")
4. if s == "Q":
5. break
6. print("输入的名字是:{}".format(s))
7. print("程序退出")
1. #多层循环,break退出最内层循环
2. while True:
3.     s = input("请输入一个名字(按Q退出):")
4. if s == "Q":
5. break
6. for i in s:
7. if i == "E":
8. break
9. print(i, end = " ")
10. print("程序退出")
1. #不能结束循环 跳出本次循环
2. for s in "PYTHON":
3. if s == "Y":
4. continue
5. print(s, end = " ")
6. print("\n")

跳转示例break:求n的最大真约数。

1. a = eval(input("请输入一个整数:"))
2. i = int(a / 2)
3. while i > 0:
4. if a % i == 0:
5. break
6.     i -= 1
7. print("{}的最大真约数是:{}".format(a, i))

跳转示例continue:输入6个整数,输出输入数值中正整数之和,忽略负数。

1. sum = 0
2. for i in range(6):
3.     n = eval(input("请输入一个整数:"))
4. if n < 0:
5. continue
6. sum += n
7. print(sum)

流程控制实例1:蒙特卡罗方法计算圆周率

1. import random
2. NUM = 10000
3. n = 0
4. for i in range(NUM):
5.     x = random.random() *2 - 1
6.     y = random.random() *2 - 1
7. if ((x * x + y * y) <= 1):
8.         n += 1
9. print("PI=%.5f" % (n *4.0 / 10000))

流程控制实例2:输出数字金字塔

1. n = eval(input("请输入正整数n:"))
2. for i in range(1, n + 1):
3. for j in range(1, n - i + 1):
4. print(end = " ")
5. for j in range(1, i + 1):
6. print((i - j + 1), end = "")
7. for j in range(2, i + 1):
8. print(j, end = "")    
9. print()

小作业:

1、输入一个整数N,并计算1到N相加的和。

2、 利用for循环,分别计算1—100中奇数的和、偶数的和。

3、利用for循环计算n!的值。

4、 求s=1 +2 +3……+n,当加到第几项时,s的值会超过1000?

5、最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数。

6、 编一程序求满足不等式1+ 1/2 + 1/3 …+1/n >=5的最小n值。

7、 校体操队到操场集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分别按每行排4,5,6人,都多出1人;当排成每行7人时,正好不多。求校体操队至少多少人?

8、 对于给定的自然数n(n<20),在屏幕上输出仅由“*”构成的n行的直角三角形。 例如:当n=5时,输出:

   *    

  * *

 * * *

* * * *

* * * * *

9、百钱买百鸡问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

10、 求100-999中的水仙花数。若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。 例如153,13+53+33=1+125+27=153,则153是水仙花数。

11、输出100—200中所有的素数。

12、输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)。

13、把一个合数分解成若干个质因数乘积的形式(即求质因数的过程)叫做分解质因数。分解质因数(也称分解素因数)只针对合数。输入一个正整数n,将n分解成质因数乘积的形式。输入样例:36 输出样例:36=2*2*3*3

【分析】 将任意的n分解为质因数的乘积,要从最小的质数开始,那么,我们就不妨从2开始试除,能整除就输出2,再对商继续试除,直到不再含有因子2;然后用下一个质数反复试除,……,再用下一个质数试除,……,一直到商为1,停止操作。这里,质因数的递增,是一层循环,每一个质因数的反复试除,又是一层循环。因此,本题使用两层循环来解决。

14、阶乘之和,输入n,计算S=1! + 2! + 3! + … + n!的末6位(不含前导0)。n<=106, n!表示前n个正整数之积。样例输入:10     样例输出:37913

程序的异常处理  try-except

1. #输入异常
2. >>> n=eval(input("请输入一个数字:"))
3. 请输入一个数字:python
4. Traceback (most recent call last):
5.   File "<pyshell#0>", line 1, in <module>
6.     n=eval(input("请输入一个数字:"))
7.   File "<string>", line 1, in <module>
8. NameError: name 'python' is not defined
1. #输入异常处理
2. try:
3.     n = eval(input("请输入一个数字:"))
4. print("{}的3次方为:{}".format(n, pow(n, 3)))
5. except:
6. print("输入有误,请重新输入!")
1. #执行异常
2. >>> for i in range(5):
3.  print(10/i,end="")  
4. Traceback (most recent call last):
5.   File "<pyshell#6>", line 2, in <module>
6. print(10/i,end="")
7. ZeroDivisionError: division by zero
1. #执行异常处理
2. try:
3. for i in range(5):
4. print(10/i,end="")
5. except:
6. print("某种原因,出错了!")
1. #特定错误类型处理
2. try:
3. for i in range(5):
4. print(10/i,end="")
5. except ZeroDivisionError:
6. print("除数为零,产生除零错误!")
7. except:
8. print("某种原因,出错了!")

实例解析——猜数字游戏

1. import random
2. target = random.randint(1, 1000)
3. count = 0
4. while True:
5.     guess = eval(input("请输入猜测的整数(1至1000):"))
6.     count += 1
7. if guess > target:
8. print("大了!")
9. elif guess < target:
10. print("小了!")
11. else:
12. print("对了!")
13. break
14. print("本轮猜测的次数是:{}".format(count))
1. import random
2. target = random.randint(1, 1000)
3. count = 0
4. while True:
5. try:
6.         guess = eval(input("请输入猜测的整数(1至1000):"))
7. except:
8. print("输入有误,请重新输入,本轮不计入猜测次数!")
9. continue
10.     count += 1
11. if guess > target:
12. print("大了!")
13. elif guess < target:
14. print("小了!")
15. else:
16. print("对了!")
17. break
18. print("本轮猜测的次数是:{}".format(count))

小作业:

1.猜数游戏续。当用户输人的不是整數(如字母、浮点数等)时,程序会终止执行退出。改编题目1中的序,当用户输入出错时给出“输入内容必须为整数!"的提示,并让用户重新输人。

2.羊车门问题。有三扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?一这是 一个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。

相关文章
|
23天前
|
存储 人工智能 算法
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
|
2月前
|
缓存 Shell 开发工具
[oeasy]python0012_程序写错了怎么办
这段内容主要讲述了如何处理Python文件运行时的`NameError`。首先,使用`vi`编辑器
22 0
|
15天前
|
Python
python学习3-选择结构、bool值、pass语句
python学习3-选择结构、bool值、pass语句
|
4天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
8 3
|
6天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
11天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
11天前
|
数据采集 监控 前端开发
使用Python打造爬虫程序之入门探秘:掌握HTTP请求,开启你的数据抓取之旅
【4月更文挑战第19天】本文介绍了爬虫技术的基本概念和用途,阐述了HTTP协议的重要性。在Python中,借助requests库可轻松发送HTTP请求,如GET和POST。文章还展示了如何设置请求头、处理cookies和session。通过学习这些基础知识,读者将能够开始网络数据抓取,为进一步的数据分析奠定基础。后续文章将探讨HTML解析、动态内容处理及反爬虫策略。
|
12天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
20 0
|
14天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
39 0
|
15天前
|
存储 Python
Python的结构
【4月更文挑战第15天】Python的结构
18 4