Python核心程式設計v2.0 第11章習題答案
1.
input = 2:ERROR ; 2,3,4 ; 2,3,4
input = 4 : ERROR ; 4 ;4
input = 5 : ERROR ; None ; None
2.
不明白啥是產物,故保留了加法式子
# -*- coding: utf-8 -*-
def fun1(li,li2):
re = {}
for i in range(len(li)):
re[str(li[i])+'+'+str(li2[i])] = li[i]+ li2[i]
return re
if __name__ == '__main__':
li = [1 ,2,3,4]
li2 = [5,6,7,8]
re = fun1(li,li2)
for eachkey in re:
print eachkey,re[eachkey]
結果:
4+8 12
2+6 8
3+7 10
1+5 6
3.
a,b寫在一起了,b用到了非關鍵字可變長引數來接收當輸入是引數集合的情況
# -*- coding: utf-8 -*-
def max2(num,num2):
if num >= num2:
return num
else:
return num2
def min2(num,num2):
if num <= num2:
return num
else:
return num2
def my_max(lis,*therest):
#判斷傳入的引數1是不是list,按list比較
if isinstance(lis,list):
temp = lis[0]
for i in lis:
if temp < i:
temp = i
return temp
#傳入的是引數集合,按引數集合比較
else:
temp = lis
for i in therest:
if temp < i:
temp = i
return temp
def my_min(lis,*therest):
if isinstance(lis,list):
temp = lis[0]
for i in lis:
if temp > i:
temp = i
return temp
else:
temp = lis
for i in therest:
if temp > i:
temp = i
return temp
if __name__ == '__main__':
print my_max([1,3,4,5])
print my_min([2,4,1,7])
print my_max(['wqe','rd','wes'])
print my_max(1,3,4,2)
4.
# -*- coding: utf-8 -*-
def turning(fen):
h = fen / 60
m = fen % 60
return h,m
if __name__ == '__main__':
fen = 75
(h,m) = turning(fen)
print h,m
5.
設定一個預設引數即可,形如tax = 0.75
6.
翻譯過來的中文怎麼看著這麼奇怪,經常不能理解到底在說啥。
# -*- coding: utf-8 -*-
def turning(s,*arg):
#注意不要寫成字串形式了
print s % arg
if __name__ == '__main__':
turning('%d and %d',7,9)
7.
if __name__ == '__main__':
li1 = [1,2,3]
li2 = ['a','b','c']
li3 = []
map(lambda x,y:li3.append((x,y)),li1,li2)
print zip(li1,li2)
8.
# -*- coding: utf-8 -*-
def func(year):
if year % 4 == 0 and year % 100 != 0:
return 1
elif year % 400 == 0:
return 1
else:
return 0
if __name__ == '__main__':
list = [2010,2016,1994]
li = filter(func,list)
li2 = [n for n in list if func(n) == 1]
9.
reduce的效果是list[0]與list[1]經過func 產生一個結果,然後這個結果再和list[3]進行func,依次向後進行
# -*- coding: utf-8 -*-
def average(num):
su = reduce(lambda x, y: x + y, num)
ave = su/len(num)
return ave
if __name__ == '__main__':
num = [1,2,3,4,5]
print average(num)
10.
os.listdir 列出指定目錄的檔案,filter返回不包括這兩個特殊目錄的其餘檔案
11.
# -*- coding: utf-8 -*-
def cleanfile(lines):
li = map(lambda x:x.strip(),lines)
#列表解析
#li = [x.strip() for x in lines]
return li
if __name__ == '__main__':
order = raw_input('new or old')
name = raw_input('filename')
f = open(name, 'r')
lines = f.readlines()
f.close()
li = cleanfile(lines)
if order == 'new':
file2 = raw_input('newfile')
else:
file2 = name
f = open(file2, 'w')
for i in li:
f.write(i)
f.write('\n')
f.close()
12.
time.clock返回當前的cpu時間
# -*- coding: utf-8 -*-
import time
def testit(func,*arg):
t0 = time.clock()
re = func(*arg)
t1 = time.clock()-t0
return re,t1
if __name__ == '__main__':
funcs = (int,float)
vals = ('123',123)
for eachfunc in funcs:
print '__________'
for eachval in vals:
retval = testit(eachfunc,eachval)
print 'result: ',retval[0]
print 'time:',retval[1]
13.
# -*- coding: utf-8 -*-
import time
def mult(x,y):
return x*y
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return (n*factorial(n-1))
def testit(func,*arg):
t0 = time.clock()
re = func(*arg)
t1 = time.clock()-t0
return re,t1
if __name__ == '__main__':
li = range(1,6)
# re = reduce(mult,li)
re = testit(reduce,mult,li)
# re2 = reduce(lambda x,y:x*y,li)
re2 = testit(reduce,lambda x,y:x*y,li)
# re3 = factorial(5)
re3 = testit(factorial,5)
print re
print re2
print re3
結果:
lambda的用時應該是最少的
(120, 5.598383186935613e-06)
(120, 9.33063864489268e-07)
(120, 1.555106440815449e-06)
14.
# -*- coding: utf-8 -*-
def f(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return f(n-1)+f(n-2)
if __name__ == '__main__':
print f(5)
15.
f 接收開始列印的位置
# -*- coding: utf-8 -*-
def f(n):
#如當前n未到末尾則列印當前並從n+1位置再進行函式
if n + 1< len(str):
print str[n]
f(n+1)
#已到達字串末尾
else:
print str[n]
if __name__ == '__main__':
str = 'this is a string'
f(0)
16.
除法用的真實除法,單獨做了處理
# -*- coding: utf-8 -*-
from __future__ import division
from operator import add,sub,mul
from random import randint,choice
ops = {'+':add,'-':sub,'*':mul}
def doprob():
op = choice('+-*/')
nums = [randint(1,10) for i in range(2)]
nums.sort(reverse=True)
if op == '/':
ans = nums[0]/nums[1]
else:
ans = ops[op](*nums)
print '%d %s %d' % (nums[0],op,nums[1])
print '= ',ans
if __name__ == '__main__':
doprob()
17.
a)currying:將函數語言程式設計的概念與預設引數以及可變引數結合在一起,一個帶n個引數,curried的函式固化第一個引數為固定引數,並返回一個帶n-1個引數的函式物件。
currying能泛化成為PFA。PFA將任意數量的引數的函式轉化為另一個帶剩餘引數的函式物件
b)閉包:如果在一個內部函式裡,對在外部作用域(但不是全域性作用域)的變數進行引用,則內部函式就被認為是閉包。閉包和函式呼叫沒什麼關係,而是關於使用定義在其他作用域的變數。
c)生成器:掛起返回出中間值並多次繼續的協同程式
迭代器:呼叫獲得下個元素next()
18.
# -*- coding: utf-8 -*-
import threading
import time
lock = threading.Lock()
su = 100
def deco(func):
def _deco(money):
lock.acquire()
ret = func(money)
lock.release()
return ret
return _deco
@deco
def funk(money):
global su
su = su + money
return su
class MyThread(threading.Thread): # 使用類定義thread,繼承threading.Thread
def __init__(self, name):
threading.Thread.__init__(self)
self.name = "Thread-" + str(name)
def run(self): # run函式必須實現
global lock # 多執行緒是共享資源的,使用全域性變數
# time.sleep(1)
# if lock.acquire(): # 當需要獨佔counter資源時,必須先鎖定,這個鎖可以是任意的一個鎖,可以使用上邊定義的3個鎖中的任意一個
money = funk(100)
print "I am %s, set counter:%s" % (self.name, money)
print '\n'
# lock.release() # 使用完counter資源必須要將這個鎖開啟,讓其他執行緒使用
# print lock.release()
if __name__ == '__main__':
for i in xrange(1,5):
my_thread = MyThread(i)
my_thread.start()
在我機子上執行沒出現阻塞及搶佔的情況,在去掉release語句後,則只有thread 1 獲得了資源永久阻塞,原理應該沒錯。
裝飾器我現在的理解大概是在處理呼叫某函式時,自動做一些事情,並在函式結束後也可以設定再做一些處理。
相關推薦
Python核心程式設計v2.0 第11章習題答案
1. input = 2:ERROR ; 2,3,4 ; 2,3,4 input = 4 : ERROR ; 4 ;4 input = 5 : ERROR ; None ; None 2. 不
Python核心程式設計v2.0 第13章習題(下)
13. 大概寫了下設想的樣式,stock函式中的價格,應該由市場來呼叫,每日更改。這個地方設成定值,就沒寫程式驗證了。 核心在於使用者再去呼叫當時儲存的stock類時,price已經改變就有了利潤。 stack類只應該是和這隻股票相關的資料。股票當日價格,
python核心程式設計第二版-第五章習題--自己寫(歡迎批改)
第二題:操作符 1/寫一個函式,計算並返回兩個數的乘積; 2/寫一段程式碼呼叫這個函式並顯示它的結果 def ji(a,b): return a*b ji(2,6) 第三題:標準型別操作符。寫
Flask Mega-Tutorial 中文教程 V2.0 第11章:整容
最近在Flask Web Development作者部落格看到第二版Flask Mega-Tutorial已在2017年底更新,現翻譯給大家參考,希望幫助大家學習flask。 這是Flask Mega-Tutorial系列的第十一章,其中我將告訴您如何使用基於Boots
Python核心程式設計第二版第五章數字(課後習題)----我的答案
5-1.整型。講講Python普通整型和長整型的區別。標準整型型別是最通用最基本的數字型別等價於C語言的長整型,一般以十進位制表示。長整型則是標準整型型別的超集,當需要用到比標準整型型別更大的整型時,長整型就大有作為了。在一個整型後面加上L(l也是可行的),表示整型為長整型。
Python核心程式設計第二版第十五章:正則表示式(課後習題)----我的答案
15-1.識別下列字串:“bat”,“bit”,“but”,“hat”,“hit“或”hut“。import re key = 'batshdajbut' p1 = r'(bat|bit|but|hat|hit|hut)' pattern1 = re.compile(p1)
Windows核心編程:第11章 Windows線程池
integer code oid 釋放 入口 thread cor done ram Github https://github.com/gongluck/Windows-Core-Program.git //第11章 Windows線程池.cpp: 定義應用程序的入口點。
《OpenGL程式設計指南》第11章——Double-Write 案例分析
本案例主要講解在Shader中如何使用影象(Images)物件。 案例通過建立了一維紋理Buffer(TBO)用來作為顏色資料,通過繪製多個圓柱體,將繪製結果快取到另一個Image中,再在後續的模型繪製中使用該影象資料。 程式的主要執行流程: ###1 建立TBO物件,用於儲存1D 紋理資料
python核心程式設計第二版 2.11
題目描述:文字輸入,功能選擇 print '請輸入相應功能的標號 1:求輸入5個數之和。2:求輸入5個數的平均值。3:將5個數大小排序。4:退出程式' a = int(raw_input()) p = True total = 0 total1 = 0 average = 0 while p:
python程式設計快速上手第7章習題20
20.如何寫一個正則表示式,匹配每 3 位就有一個逗號的數字?它必須匹配以下數字:'42''1,234''6,368,745'但不會匹配: '12,34,567' (逗號之間只有兩位數字) '1234' (缺少逗號) 正確match寫法 : re.compile(r'^\d{1,
《Java程式設計思想》第11章 練習題
練習1:建立一個新類Gerbil(沙鼠),包含int gerbilNumber,在構造其中初始化它。新增一個方法hop(),用以列印沙鼠的號碼以及他正在跳躍的資訊,建立一個ArrayList,並向其中新增一串Gerbil物件,使用get()遍歷List,並且對每個Gerbil呼叫hop()。
Flask Mega-Tutorial 中文教程 V2.0 第9章:分頁
最近在Flask Web Development作者部落格看到第二版Flask Mega-Tutorial已在2017年底更新,現翻譯給大家參考,希望幫助大家學習flask。 這是Flask Mega-Tutorial系列的第九章,其中我將告訴您如何對資料庫列表進行分頁
Flask Mega-Tutorial 中文教程 V2.0 第10章:電子郵件支援
最近在Flask Web Development作者部落格看到第二版Flask Mega-Tutorial已在2017年底更新,現翻譯給大家參考,希望幫助大家學習flask。 這是Flask Mega-Tutorial系列的第十章,其中我將告訴您應用程式如何向用戶傳送電
python程式設計從入門到實踐第三章習題答案
3.1-3.2names = ['zhichao' , 'yujie' , 'yifei'] for name in names: print( name.title() + " , good night.") 3.3transportation = ['car'
Windows核心程式設計學習筆記--第13章
試試渲染,最合適自己的講解方式:流程中穿插概念。 程式執行需經由記憶體執行。所以講講windows記憶體體系結構。 windows記憶體體系結構由虛擬地址空間和記憶體兩部分組成。 記憶體: 如果每個程式執行都直接佔用記憶體,那你開一個冰封王座豈不是要佔1G的記憶體?還能不
CCNA1 V6.0第九章考試答案
1.哪兩個特性與UDP會話相關聯?(選擇兩個。) 目標裝置以最小延遲接收流量。* 跟蹤傳輸的資料段。 目標裝置重新組合訊息並將其傳遞給應用程式。 收到的資料未被確認。* 重傳未確認的資料包。 2.如果部分FTP訊息未傳送到目的地,會發生什麼? 郵件丟
CCNA1 V6.0第六章考試答案
1. OSI模型中網路層的哪個特性允許在多個主機之間承載多種型別通訊的資料包? 從較低層解封集 選擇路徑並將資料包指向目的地 操作能力,不考慮每個資料包中攜帶的資料* 能夠在主機上執行的程序之間管理資料傳輸 2. IP的兩個特徵是什麼?(選
程式設計珠璣之第三章習題8
#include <iostream>#include <cstdio>#include <cassert>#include <cmath>#define SECTION 7#define MAX_NUM 10#define ROWS 5#define CO
程式設計珠璣之第三章習題7
習題描述:7.常見的字典允許使用者查詢單詞的定義。習題2.1描述了允許使用者查詢變位詞的字典。設計查詢單詞的正確拼寫的字典和查詢單詞的押韻詞的字典。討論具有以下功能的字典:查詢整數序列(例如:1,1,2,3,5,8,13,21…)、化學結構或者歌曲韻律結構。習題解析: 1
Python核心程式設計(第二版)課後習題部分答案
2-11:借鑑了一位博主的稿子,但關鍵部分做了改動。# !/usr/bin/env python # -*- coding:utf-8 -*- print ('Please input corresponding number to run different functi