Python 用自然语言/流程图描述算法并实现!

508 阅读4分钟

算法的定义及作用

一、导入:编程解决问题的步骤

  1. 分析问题
  2. 划分边界
  3. 设计算法 #importance
  4. 编写程序
  5. 调试测试
  6. 后期维护

注:参考嵩天老师的《Python语言程序设计》

二、生活中的算法问题:饮料换杯

两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?

再拿一个杯子。

  1. 设计算法:
    t=a #第一步
    a=b #第二步
    b=t #第三步

  2. 编写代码:

    a="可乐" b="雪碧" t=a a=b b=t print("a=",a,"b=",b) a= 雪碧 b= 可乐 1234567

完成由算法到程序的过程。

算法的定义:解决问题的步骤
算法是有限步骤内求解某一问题所使用的一组定义明确的规则。

算法怎么描述

一、自然语言描述鸡兔同笼问题

我国古代数学著作《孙子算经》中应有“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各有几和?”

  1. 数学思维:假设法、列方程
  2. 计算思维:穷举法

列举出鸡和兔子只数的组合,不断试错。
试错有止境。
将鸡的数量定义为变量a,则兔为35-a,鸡和兔脚数量的总和是否为94即为程序是否结束的判断标准

二、自然语言描述鸡兔同笼问题
算法描述的两个基本要素:初始状态、变化规律。

  1. 初始状态:最开始尝试的那一组数据(0只鸡、35只兔子)设鸡为变量n,兔子为变量35-n。
  2. 变化规律:失败了之后鸡的数量+1,兔子的数量-1。变化规律n=n+1。

故:自然语言描述

  1. 假设的鸡的数量为n只;兔的数量为35-n;

  2. n=0;

  3. 如果2

    n+4

    (35-n)=94,则输出结果n;否则执行步骤4;

  4. n=n+1;

  5. 执行步骤3;

二、流程图描述鸡兔同笼问题:

![](https://p6-tt-ipv6.byteimg.com/large/pgc-image/7c704c4fbd2f4cecaa7141624804f7fa)

三、代码实现

基础实现:

#鸡兔同笼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    #直到得出正确答案
1234567891011

运行结果:

鸡有 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,"只时,","符合条件吗?")
123456789101112

运行结果:

鸡有 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,"不符合条件!")
1234567891011121314

运行结果:

请问一共有多少个头:24
请问一共有多少只脚:84

鸡有 6 只
兔有 18 只

提出更改:

当输入头和脚的数目求解不出答案时,以上程序不会报错。
可以利用判断语句实现这一功能。

其实没有你想的这么难。想学深度学习?先学Python入门把!入门教程点这里获取