《python核心编程第二版》第八章练习解析

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。

# -*- coding: utf-8 -*-

f = input()
t = input()
i = input()

for j in range(f,t+1,i):
    print j

3.略

4.素数。我们在本章已经给出了一些代码来确定一个数的最大约数或者他是否是一个素数。请把相关的代码转换成一个返回值为布尔值的函数,函数名为isprime()。如果输入是一个素数,那么返回True,否则返回False。

import math
def isprime(n):
    if n >= 2:
        for i in range(2,int(math.sqrt(n))+1):
            if n%i==0:
                return False
        else:
            return True
    else:
        return False
5.约数。完成一个名为getfactors()的函数。他接受一个整形作为参数,返回他所有的约数的列表,包括1和他本身
<pre name="code" class="python" style="font-size: 14px; line-height: 26px;">def getfactors(n):
    list =[]
    for i in range(1,n+1):
        if n%i ==0:
            list.append(i)
    return list

 6. 
素因子分解。以刚才的练习中的isprime()和getfactors()函数为基础编写一个函数,他接受一个整形作为参数,返回该整形的所有素数因子的列表。这个过程叫做素因子分解,他输出的所有因子应该是原来的数字。注意列表里可能有重复的元素。例如输入20,返回结果应该是[2,2,5]。 

# -*- coding: utf-8 -*-
import math
def isprime(n):
    if n >= 2:
        for i in range(2,int(math.sqrt(n))+1):
            if n%i==0:
                return False
        else:
            return True
    else:
        return False
def getfactors(n):
    list =[]
    if n == 1:
        list.append(1)
    else:    
        while not isprime(n):        
            for i in range(2,n+1):
                if n%i ==0:
                    list.append(i)
                    n = n/i
                    break
                
        list.append(n)
            
    return list
if __name__ == '__main__':
    n = input()
    print getfactors(n)

7. 完全数。完全数被定义成这样的样数字:它的约数(不包括它自己)之和为他本身。例如:6的约数是1,2,3,因为1+2+3=6,所以6被认为是一个完全数。编写一个名为isperfect()的函数,他接受一个整形作为参数,如果这个数字是完全数,返回1:否则返回0。

def getfactors(n):
    list =[]
    sum =0
    for i in range(1,n):
        if n%i ==0:
            list.append(i)
            sum +=i
    if sum==n:
        return True
    else:
        return False
8. 阶乘。一个数的阶乘被定义为从1到该数字所有数字的积。N的阶乘简写为N!。N!==factorial(N)==1*2.....*N,so  4!==1*2*3*4。写一个函数,指定N,返回N!的值。

def jiecheng(n):
    num = 1
    for i in range(1,n+1):
        num *= i
    return num
9. 斐波那契数列。斐波那契数列形如1,1,2,3,5,8,13,21,等等。也就是说下一个值是前两个值得和。写一个函数,给定N,返回第N个斐波那契数字。例如,第1个斐波那契数字是1,第6个是8.

def test(num):
    a = 1
    b = 1
    if num==1 or num==2 :
        return 1
    else:
        for i in range(3,num+1):
            c = a + b
            a = b
            b = c
        return c

10. 文本处理。统计一句话中的元音,辅音及单词个数,忽略元音和辅音的特殊情况。附加题:编写处理这些特殊情况的代码。

11.

# -*- coding: utf-8 -*-

def name(n):
    count = 0
    namelist = []
    for i in range(n):
        print 'Please enter name %d:' % i,
        names = raw_input()
        if ',' in names:
            namelist.append(names)
        else:
            count += 1
            print 'Wrong format...should be Last,First.'
            print 'You have done this %d time(s) already.Fixing input...' % count
            names = names.split()
            namelist.append(names[1]+','+names[0])
            
    return sorted(namelist)
        
if __name__=='__main__':
    n = input('Enter total number of names:')
    names = name(n)
    for i in names:
        print i
12.

# -*- coding: utf-8 -*-

def test(start,end):
    if end <33 or start >126:
        print '%-8s%-8s%-8s%-8s' %('DEC','BIN','OCT','HEX')
        print '---------------------------'
    else:
        print '%-8s%-8s%-8s%-8s%-8s' %('DEC','BIN','OCT','HEX','ASCII')
        print '-------------------------------------'
    for i in range(start,end+1):
        if i>=33 and i<=126:
            print '%-8d%-8s%-8s%-8s%-8s' % (i,bin(i),oct(i),hex(i),chr(i))
        else:
            print '%-8d%-8s%-8s%-8s' % (i,bin(i),oct(i),hex(i))
    

if __name__=='__main__':
    start = raw_input('请输入起始值:')
    end = raw_input('请输入结束值:')
    test(int(start),int(end))

13.略


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值