A. python題求解答!
如果你聽說過「測試驅動開發」(TDD:Test-Driven Development),單元測試就不陌生。
單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工作。
比如對函數abs(),我們可以編寫出以下幾個測試用例:
輸入正數,比如1、1.2、0.99,期待返回值與輸入相同;
輸入負數,比如-1、-1.2、-0.99,期待返回值與輸入相反;
輸入0,期待返回0;
輸入非數值類型,比如None、[]、{},期待拋出TypeError。
把上面的測試用例放到一個測試模塊里,就是一個完整的單元測試。
如果單元測試通過,說明我們測試的這個函數能夠正常工作。如果單元測試不通過,要麼函數有bug,要麼測試條件輸入不正確,總之,需要修復使單元測試能夠通過。
單元測試通過後有什麼意義呢?如果我們對abs()函數代碼做了修改,只需要再跑一遍單元測試,如果通過,說明我們的修改不會對abs()函數原有的行為造成影響,如果測試不通過,說明我們的修改與原有行為不一致,要麼修改代碼,要麼修改測試。
這種以測試為驅動的開發模式最大的好處就是確保一個程序模塊的行為符合我們設計的測試用例。在將來修改的時候,可以極大程度地保證該模塊行為仍然是正確的。
我們來編寫一個Dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:
>>> d = Dict(a=1, b=2)
>>> d['a']
1
>>> d.a
1
mydict.py代碼如下:
class Dict(dict):
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
為了編寫單元測試,我們需要引入Python自帶的unittest模塊,編寫mydict_test.py如下:
import unittest
from mydict import Dict
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='test')
self.assertEquals(d.a, 1)
self.assertEquals(d.b, 'test')
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d['key'] = 'value'
self.assertEquals(d.key, 'value')
def test_attr(self):
d = Dict()
d.key = 'value'
self.assertTrue('key' in d)
self.assertEquals(d['key'], 'value')
def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty']
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty
編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。
以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執行。
對每一類測試都需要編寫一個test_xxx()方法。由於unittest.TestCase提供了很多內置的條件判斷,我們只需要調用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEquals():
self.assertEquals(abs(-1), 1) # 斷言函數返回的結果與1相等
另一種重要的斷言就是期待拋出指定類型的Error,比如通過d['empty']訪問不存在的key時,斷言會拋出KeyError:
with self.assertRaises(KeyError):
value = d['empty']
而通過d.empty訪問不存在的key時,我們期待拋出AttributeError:
with self.assertRaises(AttributeError):
value = d.empty
運行單元測試
一旦編寫好單元測試,我們就可以運行單元測試。最簡單的運行方式是在mydict_test.py的最後加上兩行代碼:
if __name__ == '__main__':
unittest.main()
這樣就可以把mydict_test.py當做正常的python腳本運行:
$ python mydict_test.py
另一種更常見的方法是在命令行通過參數-m unittest直接運行單元測試:
$ python -m unittest mydict_test
.....
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK
這是推薦的做法,因為這樣可以一次批量運行很多單元測試,並且,有很多工具可以自動來運行這些單元測試。
setUp與tearDown
可以在單元測試中編寫兩個特殊的setUp()和tearDown()方法。這兩個方法會分別在每調用一個測試方法的前後分別被執行。
setUp()和tearDown()方法有什麼用呢?設想你的測試需要啟動一個資料庫,這時,就可以在setUp()方法中連接資料庫,在tearDown()方法中關閉資料庫,這樣,不必在每個測試方法中重復相同的代碼:
class TestDict(unittest.TestCase):
def setUp(self):
print 'setUp...'
def tearDown(self):
print 'tearDown...'
可以再次運行測試看看每個測試方法調用前後是否會列印出setUp...和tearDown...。
小結
單元測試可以有效地測試某個程序模塊的行為,是未來重構代碼的信心保證。
單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。
單元測試代碼要非常簡單,如果測試代碼太復雜,那麼測試代碼本身就可能有bug。
單元測試通過了並不意味著程序就沒有bug了,但是不通過程序肯定有bug。
B. python的小練習。。求給代碼答案。
value=int(raw_input("Enteranumber:"))
ifvalue<60:
print'D'
elifvalue<80:
print'C'
elifvalue<90:
print'B'
else:
print'A'
練習一
foriinrange(100):
print"Ilovepython!"
i=0
whilei<100:
print"Ilovepython!"
i+=1
練習二
defmax(m,n):
ifm>n:
returnm
returnn
printmax(3,9)
printmax(5.0,2.0)
練習三
C. 簡單Python題,答案我有,就是有一點看不懂
flag只是一個變數,你可以把它改成任意的字母數字下劃線組合,只要不是python內置的變數名就可以。
比如flag可以改成flag1,也可以改成fla。
如果你想問為啥要用flag,可以這樣解釋:
要判斷一個字元串是否是迴文,就需要先拿該字元串的第1個字元和最後一個字元來比較,如果相同,則繼續比較下一組;
如果不同,就不是迴文,我們也就得到結果了,也就不用比較了。
那麼比較過程中,我們如何去記錄比較結果呢?也就是說,假如我們已經知道了不是迴文,那下面程序要列印文本,如何判斷該列印哪個呢?
D. 這道python 答案填啥呀
三短一長選最長,三長一短選最短,不會就選c
E. 這題的答案(python知識)
S=[]
while1:
string=input("Pleaseinputyournumbers:")
ifstring=='999':
break
else:
ifstring!='':S.append(string)
deftest(param):
param=list(map(int,param))
a=[xforxinparamifx%4==0]#4的倍數
b=[xforxinparamifx%2==0andx%4!=0]#偶數非4的倍數
c=[xforxinparamifx%2]#奇數
print("{0}{1}{2}".format(sum(a),sum(b),sum(c)))#如果輸出0則表示沒有對應的數
test(S)
F. 用Python如何得到以下答案
#定義一個查找字元的函數
deffint(st1,st2):
chang1=len(st1)
changzong=len(st2)
print(st1,"在"+st2+"中出現的次數是:",st2.count(st1),"次")
ifst2.find(st1)>=0:
wei=[]
foriinrange(0,len(st2)):
new=st2[i:i+len(st1)]
ifnew==st1:
wei.append(i+1)
print(st1,"出現的位置是:",wei)
else:
print(st1,"不在字元串",st2,"中")
#測試這個函數是否有效
sss="hdbdhdbdbjssveoehow"
s1="bd"
fint(s1,sss)
#只需要將變數s1和sss給與不同的值就會測試不同的字元串
G. python求答案
a=int(input('請輸入年份:'))
ifa%4==0anda%100!=0ora%400==0:
print('是閏年')
else:
print('不是閏年')
H. 請問該Python題的答案是什麼
答:問題當中總共有兩個空。
第1個空,列印三門課中的最高成績,調用max()函數,同時參考姓名和年齡的列印方法,得到結果如下。
print("最高分數:", max(self.score))
第2個空輸出get_course()的值,如下所示,可使用round函數保留一位小數。
round使用例子
參考例子,所以最後的結果為:
print(round(zm.get_score(), 1))
希望可以幫助到你~
I. 求圖里的python題代碼答案
代碼:
print(input().lower())
運行截圖:
J. python第三版求答案
因為品牌機也是組裝機,現代流行的品牌機很少是自己研發生產的,也是經過專業人員的研發配置,然後再選擇其他廠家的硬體組裝而成,品牌機的優點是售後服務比較完善,硬體兼容性好,價格也相對透明。缺點是配置比較固定,價格要相對高一些。