1. 程式人生 > >Python核心程式設計v2.0 第11章習題答案

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