8-1条件语句。
#statement A if x > 0: #statement B pass elif x < 0: #statement C pass else: #statement D pass #statement E
(a).如果x<0,上面哪个语句被执行
C
(b).如果x==0,哪个语句被执行
D
(c).如果x>0,哪个语句被执行
B
8-2.循环。编写一个程序。
Form = int(raw_input('Input start number: ')) To = int(raw_input('Input end number: ')) Inc = int(raw_input('Input range number: ')) for i in range(Form, To+1, Inc): print(i)
8-3.range()。如果我们需要生成下面这些列表,分别需要在range()内建函数中提供哪些参数
(a).
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(b).
>>> range(3, 19, 3) [3, 6, 9, 12, 15, 18]
(c).
>>> range(-20, 861, 220) [-20, 200, 420, 640, 860]
8-4.素数。编写一个函数来判定一个数是否是素数,是则返回True,不是则返回False。
def isprime(num): for i in range(2, num): if num % i == 0: print('False') break else: print('True') if __name__ == '__main__': num = int(raw_input('Input a number: ')) isprime(num)
8-5.约数。完成一个名为getfactors()的函数。它接受一个整型为参数,返回它所有约数的列表,包括1和它本身。
def getfactors(num): aList = [] for i in range(1, num+1): if num % i == 0: aList.append(i) return aList if __name__ == '__main__': num = int(raw_input('Input a number: ')) print(getfactors(num))
8-6.素因子分解。以前两题的函数作为基础,编写一个函数,它接受一个整型作为参数,返回该整型所有素数因子的列表。
def isprime(num): for i in range(2,num): if num % i==0: return False else: return True def getfactors(num): aList = [] while not isprime(num): for i in range(2, num+1): if num % i == 0: if isprime(i): aList.append(i) num = num/i break else: aList.append(num) return aList if __name__ == '__main__': num = int(raw_input('Input a number: ')) print(getfactors(num))
素因子就是这个数约数中为素数的数。
8-7.完全数。完全数被定义为这样的数字:它的约数之和为它本身。编写一个名为isperfect()的函数。它接受一个整型作为参数,如果这个数字是完全数,返回1,else返回0
def isperfect(num): aList = [] for i in range(1, num): if num % i == 0: aList.append(i) Sum = 0 for eachNum in aList: Sum += eachNum if Sum == num: return 1 else: return 0 if __name__ == '__main__': num = int(raw_input('input a number: ')) print(isperfect(num))
8-8.阶乘。一个数的阶乘被定义为从1到该数字所有数字的乘积。写一个函数,指定N,返回N!的值。
def factorial(N): while True: if N == 1: return 1 else: return N * factorial(N-1) if __name__ == '__main__': N = int(raw_input('input a number: ')) print(factorial(N))
8-9.斐波那契数列。写一个函数,给定N,返回第N个斐波那契数字。
def fib(num): a = 1 b = 1 c = 2 if num == 1 or num == 2 : return 1 else: for i in range(3,num): a = b + c (a,c)=(c,a) (b,a)=(a,b) return c if __name__ == '__main__': num = int(raw_input('input a number:')) print(fib(num))
8-10.文本处理。统计一句话的元音,辅音和单词个数。
def count(word): vowel = 0 cons = 0 words = 0 for i in word: if i == 'a' or i == 'e' or i == 'i' or i == 'o' or i == 'u': vowel += 1 else: cons += 1 words = len(word.split()) return [vowel, cons, words] if __name__ == '__main__': print(count('i love you'))
8-11.文本处理
def nameList(): total = int(raw_input('Enter total number of names: ')) aList = [] for i in range(total): prompt = 'Please enter name %d: ' % i inp = raw_input(prompt) count = 0 while inp.count(',') == 0: inp = raw_input('Wrong format... should be Last, First.') count += 1 print 'You have done this %d time(s) already. Fixing input...' % count aList.append(inp.split(',')) aList.sort(lambda x, y:cmp(x[0], y[0])) print('The sorted list (by last name) is: ') for name in aList: print('%s, %s' % (name[0], name[1])) if __name__ == '__main__': nameList()
8-12.转
start = int(raw_input('start: ')) end = int(raw_input('end: ')) title = 'DEC\tBIN\tOCT\tHEX' for i in xrange(start, end + 1): if 0x20 <= i <= 0x7e: title += '\tASCII' break print title for i in xrange(start, end + 1): if 0x20 <= i <= 0x7e: print '%d\t%s\t%s\t%s\t%s' % (i, bin(i)[2:], oct(i)[1:], hex(i)[2:], chr(i)) else: print '%d\t%s\t%s\t%s' % (i, bin(i)[2:], oct(i)[1:], hex(i)[2:])自己想了很久各种进制转换方法,看了别人代码感觉自己很迷。
8-13.程序执行性能。在8.5.2节里,我们介绍了两种基本的迭代序列方法:(1)通过序列项,以及(2)通过序列索引遍历。该小节的末尾我们指出后一种方法在序列很长的时候性能不佳,你认为它的原因是什么?