《python核心程式設計第二版》第八章練習解析
阿新 • • 發佈:2019-01-22
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.略