您的位置:首页 > 编程语言 > Python开发

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

2015-05-02 11:54 246 查看
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.略
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: