python核心编程v2.0 第8章习题答案

来源:互联网 发布:淘宝订单险 编辑:程序博客网 时间:2024/05/22 18:38

2.

if __name__ == '__main__':    f = int(raw_input('from:'))    t = int(raw_input('to:'))    i = int(raw_input('increment:'))    x = 0    while f+x <= t:        print f+x        x = x + i

3.

    print range(0,10)    print range(3,21,3)    print range(-20,1080,220)

4.

def showMaxFactor(num):    count = num/2    while count>1:        if num % count == 0:            return False            break        count = count-1    else:        return Trueif __name__ == '__main__':    while True:        num = int(raw_input('number'))        print showMaxFactor(num)

5.

def getfactors(num):    lis = []    for i in range(num):        if i == 0:            pass        else:            if num % i == 0:               lis.append(i)    lis.append(num)    return lisif __name__ == '__main__':    while True:        num = int(raw_input('number'))        lis = getfactors(num)        for i in lis:            print i

6.

def showMaxFactor(num):    count = num/2    while count>1:        if num % count == 0:            return False            break        count = count-1    else:        return Truedef getfactors(nex,lis):    i=2    while i <= nex:        if nex % i == 0 and showMaxFactor(i) == True:            lis.append(i)            nex = nex/i            #迭代寻找,注意完成后需要break否则会出现错误            getfactors(nex,lis)            break        i = i+1    return lisif __name__ == '__main__':    while True:        num = int(raw_input('number'))        lis = []        li = getfactors(num,lis)        for i in li:            print i

7.

def getfactors(num):    lis = []    for i in range(num):        if i == 0:            pass        else:            if num % i == 0:               lis.append(i)    return lisdef isperfect(num,lis):    s =sum(lis)    if num == s :        return 1    else:        return 0if __name__ == '__main__':    while True:        num = int(raw_input('number'))        lis = getfactors(num)        # print lis        print isperfect(num,lis)

8.

def factorial(num):    i = 1    sum = 1    while i <= num:        sum = sum*num        num = num -1        i = i+1    return sumif __name__ == '__main__':    while True:        num = int(raw_input('number'))        print factorial(num)

9.

def f(num):    lis = [1,1]    i = 2    while i < num:        lis.append(lis[i-2]+lis[i-1])        i = i+1    return lis[num-1]if __name__ == '__main__':    while True:        num = int(raw_input('number'))        ls = f(num)        print ls

10.
元音字母为aeiou 读取后比对即可,单词用空格来确定。特殊情况需要查语法,未补充,大概思路一样,会涉及读到某个字母则再向下多读一个的情况

def count(sentence):    ls = list('aeiou')    num1 = 0    num2 = 0    num3 = 1    for i in sentence:        if i == ' ':            num3=num3+1        elif i in ls:            num1 = num1+1        else:            num2 = num2+1    print num1,num2,num3if __name__ == '__main__':    while True:        sentence = raw_input('sentence')        count(sentence)

11.

def check(name):   if name.count(',')!=1:       return 1   else:       return 0if __name__ == '__main__':    ls = []    wrong = 0    for i in range(4):        name = raw_input('name')        if check(name)!= 0:            wrong = wrong + check(name)            print 'now wrong',wrong        else:            ls.append(name)    ls.sort()    for i in ls:        print i

12.

if __name__ == '__main__':    num1 = int(raw_input('from'))    num2 = int(raw_input('to'))    print 'DEC','BIN','OCT','HEX',    #若这个范围内会出现可打印ascll码的范围,则添加一栏    if 32<=num2<=127 or 32<=num1<=127 :        print 'ASCLL'    else:        print ''    for i in range(num1,num2+1):        print i,bin(i),oct(i),hex(i),chr(i)

13.
参考百度文库中一份答案
timeit 用于测指令耗时

import timeitli = ['wqe','as','we','qwr','wqee']li *= 10000#不在这两个函数中使用print,print耗时较大def inter_direct():    for i in li:        j = idef inter_index():    for i in range(len(li)):        j = li[i]if __name__ == '__main__':    tindex = timeit.Timer("inter_index()","from __main__ import inter_index")    tdirect = timeit.Timer("inter_direct()", "from __main__ import inter_direct")    print tindex.timeit(10)    print tdirect.timeit(10)

结果:

0.02228312019040.00943949609575

通过索引的迭代:使用range()函数得到list的索引数列表,再利用索引查找对应的序列对象,查找增加了复杂度
通过序列项的迭代:变量被设置为list中特定的某个元素