8.15 练习
8-1.条件语句。请看下边的代码:
(a)如果x<0,上面哪个语句(A, B, C, D, E)将被执行?
(b)如果x==0,上面哪个居于将被执行?
(c)如果x>0,上面哪个语句将被执行?
8-2.循环。编写一个程序,让用户输入3个数字:(f)rom,(t)o和(i)ncrement。以i为步长,从f计数到t,包括f和t。例如,如果输入的是f==2、t ==26、i ==4,程序将输出2, 6, 10, 14, 18, 22, 26。
8-3.range()。如果我们需要生成下面的这些列表,分别需要在range()内建函数中提供哪些参数?
(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(b) [3, 6, 9, 12, 15, 18]
(c) [-20, 200, 420, 640, 860]
8-4.素数。我们在本章已经给出了一些代码来确定一个数字的最大约数或者它是否是一个素数。请把相关代码转换为一个返回值为布尔值的函数,函数名为isprime()。如果输入的是一个素数,那么返回True,否则返回False。
8-5.约数。完成一个名为getfactors()的函数。它接受一个整型作为参数,返回它所有约数的列表,包括1和它本身。
8-6.素因子分解。以刚才练习中的isprime()和getfactors()函数为基础编写一个函数,它接受一个整型作为参数,返回该整型所有素数因子的列表。这个过程叫做求素因子分解,它输出的所有因子之积应该是原来的数字。注意列表里可能有重复的元素。例如输入20,返回结果应该是[2, 2, 5]。
8-7.完全数。完全数被定义为这样的数字:它的约数(不包括它自己)之和为它本身。例如:6的约数是1,2,3,因为1+2+3=6,所以6被认为是一个完全数。编写一个名为isperfect()的函数,它接受一个整型作为参数,如果这个数字是完全数,返回1;否则返回0。
8-8.阶乘。一个数的阶乘被定义为从1到该数字所有数字的乘积。N的阶乘简写为N!。 N!== factorial(N)==123…(N-2)(N_l) N. So 4! == 123*4
写一个函数,指定N,返回N!的值。
8-9.斐波那契数列。斐波那契数列形如1,1,2,3,5,8,13, 21,等等。也就是说,下一个值是序列中前两个值之和。写一个函数,给定N,返回第N个斐波那契数字。例如,第1个斐波那契数字是1,第6个是8。
8-10.文本处理。统计一句话中的元音,辅音及单词(以空格分割)的个数。忽略元音和辅音的特殊情况,如“h”,“y”,“qu”等。附加题:编写处理这些特殊情况的代码。
8-11.文本处理。要求输入一个姓名列表,输入格式是“LastName, First Name”即姓逗号名。编写程序处理输入,如果用户输入错误,比如“First Name Last Name,”,请纠正这些错误,并通知用户。同时你还需要记录输入错误次数。当用户输入结束后,给列表排序,然后以“姓,名”的顺序显示。
输入输出示例(你不需要完全按照这里的例子完成):
8-12.(整型)位操作。编写一个程序,用户给出起始和结束数字后给出一个下面这样的表格,分别显示出两个数字间所有整型的十进制,二进制,八进制和十六进制表示。如果字符是可打印的 ASCII字符,也要把它打印出来,如果没有一个是可打印字符,就省略掉ASCII那一栏的表头。请参考下面的输入输出格式:
8-13.程序执行性能。在8.5.2节里,我们介绍了两种基本的迭代序列方法:(1)通过序列项,以及(2)通过序列索引遍历。该小节的末尾我们指出后一种方法在序列很长的时候性能不佳(在我的系统下,性能差了将近两倍[83%])你认为它的原因是什么?