(建议在WIFI环境下观看) Python简单程序实现 当面对特定问题时,我们可以考虑编写程序让计算机帮助我们自动化解决。针对具体的问题,编程解决的一般过程包括:抽象与建模、设计算法、编写程序、调试运行这四个步骤。同时我们要注意,根据问题的需要,可以反复修正与执行这四个步骤,直到问题得到有效解决。 接下来我们以几个具体的示例来看看如何用Python语言实现简单问题的解决。 示例一:从键盘随机输入一个三位正整数,计算其各个数位上的数码值的和并输出。 针对这个问题,在抽象与建模阶段,我们可以先定义五个变量n,a,b,c,s。n : 表示输入的三位正整数;a : 表示 n 的个位数;b : 表示 n 的十位数;c : 表示 n 的百位数s : 表示 a+b+c; 让计算机输入的是随机的三位正整数n;应用取模运算(%)和整除运算(//)分别计算a、b、c;a = n%10;b = n//10%10;c = n//100,最后计算s = a+b+c,并输出s。 整体上来说,以上过程可以采用顺序结构来实现。 在算法设计阶段:程序开始,输入N,分别计算各个数位上的数值,然后将和赋值给S,输出S,程序结束。 在编写程序阶段:用INPUT和int函数界定输入的三位正整数;用取模和整除运算分别计算A/B/C,将三者累加赋值给S,最后用PRINT函数输出结果。 在运行调试阶段:有位同学发现自己的程序无法运行,给出的提示是变量N没有定义,我们看程序代码可以发现,在输入代码时,他在计算b时将n大写了。 在Python语言中,变量名大小写代表的是不同的变量。 正确的代码是将这个地方改正过来,程序运行后,当我们输入263,输出的结果是11 示例二:从键盘随机输入一个三位正整数,判断它是不是“水仙花数”?并输出结果。 我们知道,水仙花数是指一个 三 位正整数n ,它的每个数位上的数字的 三次幂之和等于 n本身。比如三位正整数153,因为它三个数位上的三次方的和正好等于它本身,所以153是“水仙花数”。 针对这个问题,在抽象与建模阶段,我们同样可以定义六个变量n,a,b,c,m,s。其中m : 表示 a**3+b**3+c**3. S作为字符型变量,表示”是”或”不是”。 让计算机输入的是随机的三位正整数n;应用取模运算(%)和整除运算(//)分别计算a、b、c,并计算m,然后判断m和n是否相等?结果为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之间所有的“水仙花数”。 和前面的示例三类似,只不过这里的验证范围扩大了,我们可以借用前面这个流程图来完善,当然这个问题也可以用While和for语句实现,我们先确定范围。 问题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语言实现简单的算法可以实现让计算机自动处理。当人们借助计算机来解决实际问题时,由于问题类型和复杂程度的不同,很难有解决所有问题的统一算法。同时,解决同一个问题的算法一般也不是唯一的,希望同学们在具体实践中细细体会,相信大家都是最棒的。
|
|
来自: 木舟u2497sll0j > 《待分类》