分享

木舟| Python简单程序实现 | 《信息技术》(2021版)二次学习微视频004

 木舟u2497sll0j 2021-12-08

(建议在WIFI环境下观看)


Python简单程序实现

当面对特定问题时,我们可以考虑编写程序让计算机帮助我们自动化解决。针对具体的问题,编程解决的一般过程包括:抽象与建模、设计算法、编写程序、调试运行这四个步骤。同时我们要注意,根据问题的需要,可以反复修正与执行这四个步骤,直到问题得到有效解决。

接下来我们以几个具体的示例来看看如何用Python语言实现简单问题的解决。

示例一:从键盘随机输入一个三位正整数,计算其各个数位上的数码值的和并输出。

针对这个问题,在抽象与建模阶段,我们可以先定义五个变量nabcsn : 表示输入的三位正整数;a : 表示 n 的个位数;b : 表示 n 的十位数;c : 表示 n 的百位数s : 表示  a+b+c

让计算机输入的是随机的三位正整数n;应用取模运算(%)和整除运算(//)分别计算abca = n%10b = n//10%10c = n//100,最后计算s = a+b+c,并输出s

整体上来说,以上过程可以采用顺序结构来实现。

在算法设计阶段:程序开始,输入N,分别计算各个数位上的数值,然后将和赋值给S,输出S,程序结束。

在编写程序阶段:用INPUTint函数界定输入的三位正整数;用取模和整除运算分别计算A/B/C,将三者累加赋值给S,最后用PRINT函数输出结果。

在运行调试阶段:有位同学发现自己的程序无法运行,给出的提示是变量N没有定义,我们看程序代码可以发现,在输入代码时,他在计算b时将n大写了。

Python语言中,变量名大小写代表的是不同的变量。

正确的代码是将这个地方改正过来,程序运行后,当我们输入263,输出的结果是11

示例二:从键盘随机输入一个三位正整数,判断它是不是“水仙花数”?并输出结果。

我们知道,水仙花数是指一个 位正整数n ,它的每个数位上的数字的 三次幂之和等于 n本身。比如三位正整数153,因为它三个数位上的三次方的和正好等于它本身,所以153是“水仙花数”。

针对这个问题,在抽象与建模阶段,我们同样可以定义六个变量nabcms。其中m : 表示 a**3+b**3+c**3.   S作为字符型变量,表示”是”或”不是”。

让计算机输入的是随机的三位正整数n;应用取模运算(%)和整除运算(//)分别计算abc,并计算m,然后判断mn是否相等?结果为Y的话,S赋值“是”,否则赋值“不是”,这里的判断可以采用“分支结构”实现。最后根据结果输出。

在算法设计阶段:算法流程图是这样的,用分支结构对判断的结果不同,分别对S赋值。

在编写程序阶段:用双分支语句实现分支结构。

在运行调试阶段:有位同学发现运行提示“无效语法”,经查看源代码,发现这位同学将判断m是否等于n中的两个“=”输成了1个。同学们要注意,在Python语言中,一个“=”是赋值号,两个“=”才是关系运算中的是否相等。

但改正了这个问题后,运行后再次提示“无效语法”,经查源代码可以看到,在ELSE语言后面,这位同学又添加了“m!=n”的条件,这是不正确的。因为双分支中的ELSE就表示IF后面条件不成立的情况,在这里就是M已经是不等于N了。

但将这个错误改正后,发现可以运行了,运行结果中我们看到,但输入水仙花数153时,程序并没有正确的输出,而当输入另一个数155时,程序输出是正确的。针对这个问题,我们看源代码可以发现,这是因为我们将“输出语句”放在了else的缩进里面,这样就导致当是水仙花数时,程序没有输出。

所以,正确的代码应该是这样的。在这里要特别注意这几个方面。1.关系运算符的“==”;2. 双分支else后面不能再跟着写条件表达式;3.语句的缩进要注意层次。

示例三:有这样九个三位正整数,如何自动化判别这9个数哪些是水仙花数?

根据前面的学习,我们可以在这个流程图基础上进行改进。首先在输入位置定义一个列表,用于存放这9个数。

然后将原来判别一个数是不是“水仙花数”这部分的算法作为循环体,为了保证循环执行9次,我们可以再设置一个变量i,根据列表序号从0开始的特点,可以将I的初值设为0,终值设为8,循环体内再加一个“i=i+1”控制循环。

具体而言就是这样的。搭好循环结构的框架,将这部分内容作为循环体的一部分放在循环结构中。

另外,因为我们原来计算三位正整数时用的是代表其本身的变量n,现在n是作为一个列表的名称,表示的是多个数字,我们定义的变量i其实是作为列表的序号,所以需要将原来算法流程图循环体内的n替换为n[i],用于一个个表示列表里面的元素值。

设计好了算法,对于循环结构,如何用程序实现呢?

循环结构的程序语句一般有两种形式,一是while语句,它的基本格式是while+空格+条件表达式,后面的语句块可以是一条语句,也可以是一个语句组,同时用缩进表示。二是用for语句。它的基本格式是for+空格+in+序列,这里的序列可以是一个列表,也可以是range函数表示的一个序列。同样,后面的语句块可以是一条语句,也可以是一个语句组,同时用缩进表示。

我们以一个例子简单看一下他们的联系与区别。

While语句中,i表示的列表alst的序号,所以要先赋初值0,判断终值小于等于4,循环体内,用alst[i]分别表示列表元素,还要对i进行累加计算;for语句中,i直接代表一个个提取的列表中的元素,直接用i代表列表元素的值。

因此,要实现自动化判别这9个数哪些是水仙花数?用While语句和for语句都可以实现,同学们要注意其中的变量i代表的不同涵义,在赋值计算以及比较,输出时注意不要搞错了。

示例四:寻找100-999之间所有的“水仙花数”。

和前面的示例三类似,只不过这里的验证范围扩大了,我们可以借用前面这个流程图来完善,当然这个问题也可以用Whilefor语句实现,我们先确定范围。

问题1:如果用while循环,定义i为循环变量i

很明显,初值应该是100,终值是999

问题2:如果用for循环,且用range(  )函数,表达式如何表示?

range(  )函数里面的参数如何确定,因为range(  )函数确定的范围不包含终值,所以,这里应该是填写range(100,1000,1),也就是初值为100,终值为1000,步长为1.

确定了范围,我们就可以编写程序了。

for语句实现循环的算法中,不需要再用语句“i=i+1”,而在用while语句实现的循环中,必须要在循环体内加入这条语句“i=i+1”,来保证循环能够正常结束。

其实,刚才的示例三和示例四,我们已经采用了一种常见的算法:枚举算法

枚举算法:根据已知条件,在给定范围内对所有可能的答案按照某种顺序逐一列举和检验,从中找出那些符合要求的答案。

它有两个关键点:

1.确定范围:问题涉及的情况有哪些,情况种数是否可确定?

2.验证条件:满足什么条件才能成为问题的解答。

枚举算法的特征是:一一列举、逐一检验,要做到不重复、不遗漏。枚举算法是一种常用算法。

前面示例三和示例四就是枚举算法的典型应用,从这两个示例的流程图中,我们可以看到,枚举算法一般是用循环结构来负责一一列举,分支结构来负责逐一检验。

同学们,Python语言实现简单的算法可以实现让计算机自动处理。当人们借助计算机来解决实际问题时,由于问题类型和复杂程度的不同,很难有解决所有问题的统一算法。同时,解决同一个问题的算法一般也不是唯一的,希望同学们在具体实践中细细体会,相信大家都是最棒的。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多