Python 用自然语言/流程图描述算法并实现(以鸡兔同笼问题为例)
索引
算法的定义及作用
一、导入:编程解决问题的步骤
- 分析问题
- 划分边界
- 设计算法 #importance
- 编写程序
- 调试测试
- 后期维护
注:参考嵩天老师的《Python语言程序设计》
二、生活中的算法问题:饮料换杯
两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?
再拿一个杯子。
-
设计算法:
t=a #第一步
a=b #第二步
b=t #第三步 -
编写代码:
>>> a="可乐"
>>> b="雪碧"
>>> t=a
>>> a=b
>>> b=t
>>> print("a=",a,"b=",b)
a= 雪碧 b= 可乐
完成由算法到程序的过程。
算法的定义:解决问题的步骤
算法是有限步骤内求解某一问题所使用的一组定义明确的规则。
算法怎么描述
一、自然语言描述鸡兔同笼问题
我国古代数学著作《孙子算经》中应有“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各有几和?”
- 数学思维:假设法、列方程
- 计算思维:穷举法
列举出鸡和兔子只数的组合,不断试错。
试错有止境。
将鸡的数量定义为变量a,则兔为35-a,鸡和兔脚数量的总和是否为94即为程序是否结束的判断标准
二、自然语言描述鸡兔同笼问题
算法描述的两个基本要素:初始状态、变化规律。
- 初始状态:最开始尝试的那一组数据(0只鸡、35只兔子)设鸡为变量n,兔子为变量35-n。
- 变化规律:失败了之后鸡的数量+1,兔子的数量-1。变化规律n=n+1。
故:自然语言描述
- 假设的鸡的数量为n只;兔的数量为35-n;
- n=0;
- 如果2n+4(35-n)=94,则输出结果n;否则执行步骤4;
- n=n+1;
- 执行步骤3;
二、流程图描述鸡兔同笼问题:
三、代码实现
基础实现:
#鸡兔同笼V1:
n=0
m=35-n #设初值,鸡有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:
if 2*n+4*m == 94: #表判断
print("鸡有",n,"只")
print("兔有",m,"只")
break
else:
n=n+1 #鸡的数量加一,兔子的数量减一,不断试错
m=35-n #直到得出正确答案
运行结果:
鸡有 23 只
兔有 12 只
能看过程的:
n=0
m=35-n #设初值,鸡有0只,兔子有35只
while 0<=n<=35 and 0<=m<=35:
if 2*n+4*m == 94: #表判断
print("符合!")
print("鸡有",n,"只")
print("兔有",m,"只")
break
else:
n=n+1 #鸡的数量加一,兔子的数量减一,不断试错
m=35-n #直到得出正确答案
print("鸡有",n,"只、","兔有",m,"只时,","符合条件吗?")
运行结果:
鸡有 1 只、 兔有 34 只时, 符合条件吗?
鸡有 2 只、 兔有 33 只时, 符合条件吗?
鸡有 3 只、 兔有 32 只时, 符合条件吗?
鸡有 4 只、 兔有 31 只时, 符合条件吗?
鸡有 5 只、 兔有 30 只时, 符合条件吗?
鸡有 6 只、 兔有 29 只时, 符合条件吗?
鸡有 7 只、 兔有 28 只时, 符合条件吗?
鸡有 8 只、 兔有 27 只时, 符合条件吗?
鸡有 9 只、 兔有 26 只时, 符合条件吗?
鸡有 10 只、 兔有 25 只时, 符合条件吗?
鸡有 11 只、 兔有 24 只时, 符合条件吗?
鸡有 12 只、 兔有 23 只时, 符合条件吗?
鸡有 13 只、 兔有 22 只时, 符合条件吗?
鸡有 14 只、 兔有 21 只时, 符合条件吗?
鸡有 15 只、 兔有 20 只时, 符合条件吗?
鸡有 16 只、 兔有 19 只时, 符合条件吗?
鸡有 17 只、 兔有 18 只时, 符合条件吗?
鸡有 18 只、 兔有 17 只时, 符合条件吗?
鸡有 19 只、 兔有 16 只时, 符合条件吗?
鸡有 20 只、 兔有 15 只时, 符合条件吗?
鸡有 21 只、 兔有 14 只时, 符合条件吗?
鸡有 22 只、 兔有 13 只时, 符合条件吗?
鸡有 23 只、 兔有 12 只时, 符合条件吗?
符合!
鸡有 23 只
兔有 12 只
尝试将鸡和兔子的头和脚的数量改成可以输入的模式:
a=int(input("请问一共有多少个头:"))
b=int(input("请问一共有多少只脚:"))
n=0
m=a-n
while 0<=n<=a and 0<=m<=a:
if 2*n+4*m == b:
print("==================================================")
print("鸡有",n,"只")
print("兔有",m,"只")
break
else:
n=n+1
m=a-n
#print("当鸡的数量为:",n,"兔子的数量为:",m,"不符合条件!")
运行结果:
请问一共有多少个头:24
请问一共有多少只脚:84
==================================================
鸡有 6 只
兔有 18 只
提出更改:
当输入头和脚的数目求解不出答案时,以上程序不会报错。
可以利用判断语句实现这一功能。
本文地址:https://blog.csdn.net/yinaiyinai1212/article/details/109062736