




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Ch04常用內(nèi)置數(shù)據(jù)類型本章要點:4.1Python內(nèi)置數(shù)據(jù)類型概述4.2int數(shù)據(jù)類型(任意精度整數(shù))4.3float類型(有限精度浮點數(shù))4.4bool數(shù)據(jù)類型4.5complex類型4.6條件表達式、關(guān)系運算符和邏輯運算符4.7算術(shù)運算符和位運算符4.8混合運算和數(shù)值類型轉(zhuǎn)換4.9內(nèi)置標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)4.10math模塊和數(shù)學(xué)函數(shù)4.11random模塊和隨機函數(shù)4.12綜合應(yīng)用舉例資源下載提示2課件等資源:掃描封底的“課件下載”二維碼,在公眾號“書圈”中下載。素材(源碼):掃描本書目錄上方的二維碼下載。講解視頻:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最前)的二維碼,作為開源的補充閱讀和學(xué)習(xí)資源。
案例研究:掃描封底刮刮卡中的二維碼,再掃描書中相應(yīng)章節(jié)中(位于每章最后)的二維碼,可以在線學(xué)習(xí)。每章練習(xí)題:掃描封底刮刮卡中的二維碼,再掃描每章習(xí)題部分的二維碼,下載本章練習(xí)題電子版。
題庫平臺:教師登錄網(wǎng)站(),聯(lián)系客服開通教師權(quán)限Python內(nèi)置數(shù)據(jù)類型概述Python語言中,一切皆為對象,而每個對象都屬于某個數(shù)據(jù)類型Python的數(shù)據(jù)類型包括內(nèi)置的數(shù)據(jù)類型、模塊中定義的數(shù)據(jù)類型和用戶自定義的類型數(shù)值數(shù)據(jù)類型:int、bool、float、complex序列數(shù)據(jù)類型:不可變(str、tuple、bytes)和可變(list、bytearray)集合數(shù)據(jù)類型:set、frozenset字典數(shù)據(jù)類型:dict。例如:{1:"one",2:"two"}NoneType、NotImplementedType和EllipsisTypeint類型(任意精度整數(shù))(1)整型字面量:數(shù)字字符串(前面可以帶負號-)【例4.1】整型字面量示例自Python3.7版本開始,支持下劃線作為整數(shù)或者浮點數(shù)的千分位標(biāo)記,以增強大數(shù)值的可閱讀性。二進制、八進制、十六進制則使用下劃線區(qū)分4位標(biāo)記>>>a=123>>>type(a)
#輸出:<class'int'><class'int'>>>>1_000_000_000_000_000#輸出:10000000000000001000000000000000>>>0x_FF_FF_FF_FF
#輸出:42949672954294967295int類型(任意精度整數(shù))(2)創(chuàng)建int對象【例4.2】int對象示例int對象的方法【例4.3】int對象方法示例>>>int
#輸出:<class'int'>>>>int(),int(123),int('456'),int(1.23)#輸出:(0,123,456,1)>>>int('FF',16),int('100',2)
#輸出:(255,4)>>>int('abc')#報錯。ValueError:invalidliteralforint()withbase10:'abc'>>>int(100,2)#報錯。TypeError:int()can'tconvertnon-stringwith
explicitbase>>>i=-10>>>bin(i)
#數(shù)值轉(zhuǎn)換為二進制字符串。輸出:'-0b1010‘'-0b1010'>>>i.bit_length(),int.bit_length(i)#返回i的二進制位數(shù)。輸出:(4,4)(4,4)int類型(任意精度整數(shù))(3)整數(shù)的運算算術(shù)運算、位運算、內(nèi)置函數(shù)、math模塊中的數(shù)學(xué)運算函數(shù)【例4.4】整數(shù)運算示例(int_ops.py)importsysa=int(sys.argv[1])b=int(sys.argv[2])sum=a+bprint(a,'+',b,'=',sum)float類型(有限精度浮點數(shù))(1)浮點類型常量【例4.5】浮點類型字面量示例創(chuàng)建float對象【例4.6】float對象示例>>>3.14
#輸出:3.143.14>>>type(3.14)#輸出:<class'float'><class'float'>>>>float
#輸出:<class'float'>>>>
float(123),float('3.14')
#輸出:(123.0,3.14)>>>
float('Infinity'),float('-Infinity'),float('NaN')#輸出:(inf,-inf,nan)>>>
float('123abc')#報錯。ValueError:couldnotconvertstringtofloat:'123abc'float類型(有限精度浮點數(shù))(2)float對象的方法浮點數(shù)的運算算術(shù)運算,math模塊中浮點數(shù)運算的函數(shù)【例4.7】浮點數(shù)運算示例方法說明示例as_integer_ratio()轉(zhuǎn)換為分數(shù)1.25.as_integer_ratio()#結(jié)果:(5,4)float.as_integer_ratio(1.25)#結(jié)果:(5,4)hex()轉(zhuǎn)換為十六進制字符串12.3.hex()#結(jié)果:'0x1.899999999999ap+3'float.hex(12.3)#結(jié)果:'0x1.899999999999ap+3'fromhex(string)十六進制字符串轉(zhuǎn)換為浮點數(shù)float.fromhex('0xFF')#結(jié)果:255.0is_integer()判斷是否為int類型3.14.is_integer()#結(jié)果:Falsefloat.is_integer(2.0)#結(jié)果:Trueimportsysa=float(sys.argv[1])b=float(sys.argv[2])c=a*bprint(a,'*',b,'=',c)bool數(shù)據(jù)類型和相關(guān)運算符bool數(shù)據(jù)類型包含兩個值True(真)或False(假)【例4.8】布爾值字面量示例【例4.9】bool對象示例>>>True,False
#輸出:(True,False)(True,False)>>>type(True),type(False)#輸出:(<class'bool'>,<class'bool'>)(<class'bool'>,<class'bool'>)>>>bool(0)
#輸出:FalseFalse>>>bool(1)
#輸出:TrueTrue>>>bool("abc")
#輸出:TrueTruebool數(shù)據(jù)類型和相關(guān)運算符(1)Python的任意表達式都可以評價為布爾邏輯值,故均可以參與邏輯運算。例如:(2)C=AorB。如果A不為0或者不為空或者為True,則返回A;否則返回B。僅在必要時才計算第二個操作數(shù),即如果A不為0或者不為空或者為True,則不用計算B?!岸搪贰庇嬎?。例如:(3)C=AandB。如果A為0或者為空或者為False,則返回A;否則返回B。僅在必要時才計算第二個操作數(shù),即如果A為0或者為空或者為False,則不用計算B。即“短路”計算。例如:>>>1and2
#輸出:2>>>0and2
#輸出:0>>>Falseand2
#輸出:False>>>Trueand2#輸出:2>>>1or2
#輸出:1>>>0or2
#輸出:2>>>FalseorTrue#輸出:True>>>TrueorFalse#輸出:True>>>not0
#輸出:True>>>not'a'
#輸出:Falsecomplex類型(復(fù)數(shù))(1)創(chuàng)建complex對象【例4.10】復(fù)數(shù)字面量示例【例4.11】complex對象示例complex對象屬性和方法>>>1+2j
#輸出:(1+2j)>>>type(1+2j)
#輸出:<class'complex'>>>>complex
#輸出:<class'complex'>>>>c=complex(4,5)>>>c
#輸出:(4+5j)屬性/方法說明示例real復(fù)數(shù)的實部>>>(1+2j).real#結(jié)果:1.0imag復(fù)數(shù)的虛部>>>(1+2j).imag#結(jié)果:2.0conjugate()共軛復(fù)數(shù)>>>(1+2j).conjugate()#結(jié)果:(1-2j)complex類型(復(fù)數(shù))(2)復(fù)數(shù)的運算【例4.12】復(fù)數(shù)運算示例表達式結(jié)果說明1+2j(1+2j)復(fù)數(shù)字面量(1+2j)+(3+4j)(4+6j)加法(1+2j)-(3+4j)(-2-2j)減法(1+2j)*(3+4j)(-5+10j)乘法(1+2j)/(3+4j)(0.44+0.08j)除法(1+2j)**2.0(-3+4j)乘冪(1+2j)/0.0運行時錯誤除法。除數(shù)不能為0cmath.sqrt(1+2j)(1.272019649514069+0.7861513777574233j)平方根(調(diào)用數(shù)學(xué)模塊函數(shù))cmath.sqrt(-2.0)1.4142135623730951j復(fù)數(shù)的平方根>>>a=1+2j>>>b=complex(4,5)#復(fù)數(shù)4+5j>>>a+b
#復(fù)數(shù)相加。輸出:(5+7j)(5+7j)>>>importcmath>>>cmath.sqrt(b)
#復(fù)數(shù)的平方根(2.280693341665298+1.096157889501519j)比較關(guān)系運算和條件表達式條件表達式通常用于選擇語句中,用于判斷是否滿足某種條件如果表達式的結(jié)果為數(shù)值類型(0)、空字符串("")、空元組(())、空列表([])、空字典({}),則其bool值為False(假);否則其bool值為True(真)。例如:123、"abc"、(1,2)均為True【例4.13】條件表達式示例>>>bool(123),bool("abc"),bool((1,2)),bool([0]),bool([]),bool(0)(True,True,True,True,False,False)>>>bool(1>2),bool(1>2or3>2),bool(1<=2and3>2)(False,True,True)關(guān)系和測試運算符(1)關(guān)系運算符用于將兩個操作數(shù)的大小進行比較。若關(guān)系成立,則比較的結(jié)果為True,否則為False兩個相同類型的對象之間的比較數(shù)值類型(包括布爾型,True自動轉(zhuǎn)換為1,F(xiàn)alse自動轉(zhuǎn)換為0)之間可以進行比較>>>1>2
#輸出:False>>>"ab123">"ab12"#輸出:True>>>1>1.23
#輸出:False>>>2>True
#輸出:True>>>123>"abc"#報錯。TypeError:unorderabletypes:int()>str()關(guān)系和測試運算符(2)運算符表達式含義實例結(jié)果==x==yx等于y"ABCDEF"=="ABCD"False!=x!=yx不等于y"ABCD"!="abcd"True>
x>yx大于y"ABC">"ABD"False>=x>=yx大于等于y123>=23True<
x<yx小于y"ABC"<"上海"True<=x<=yx小于等于y"123"<="23"Trueisxisyx和y是同一個對象x=y=1;xisyx=1;y=2;xisyTrueFalseisnotxisnotyx和y不是同一個對象x=1;y=2;xisnotyTrueinxinyx是y的成員(y是容器,如元組)1in(1,2,3)"A"in"ABCDEF"TrueTruenotinxnotinyx不是y的成員(y是容器,如元組)1notin(1,2,3)False邏輯運算符算術(shù)運算符運算符含義說明優(yōu)先級實例結(jié)果**乘冪操作數(shù)的乘冪1n**3512+一元+操作數(shù)的值2+n8-一元-操作數(shù)的反數(shù)2-n-8*乘法操作數(shù)的積3n*n*2128/除法第二個操作數(shù)除第一個操作數(shù)310/n1.25//整數(shù)除法兩個整數(shù)相除,結(jié)果為整數(shù)310//n1%模數(shù)第二個操作數(shù)除第一個操作數(shù)后的余數(shù)310%n2+加法兩個操作數(shù)之和410+n18-減法從第一個操作數(shù)中減去第二個操作數(shù)4n-10-2運算符用法含義優(yōu)先級實例結(jié)果~~op按位求補1~0x1-2(-0x2)<<
op1<<op2將op1左移op2位20xf0<<43840(0xf00)>>
op1>>op2將op1右移op2位20xf0>>415(0xf)&op1&op2按位邏輯與30xff00&0xf0f061440(0xf000)^op1^op2按位邏輯異或40xff00^0xf0f04080(0xff0)|op1|op2按位邏輯或50xff00|0xf0f065520(0xfff0)位運算符【例4.14】位運算符示例(op_bit.py)print("~0x1結(jié)果為:",hex(~0x1))print("0b11110000<<4結(jié)果為:",bin(0b111110000<<4))print("0b11110000>>4結(jié)果為:",bin(0b111110000>>4))print("0b1111111100000000&0b1111000011110000結(jié)果為:",bin(0b1111111100000000&0b1111000011110000))print("0b1111111100000000|0b1111000011110000結(jié)果為:",bin(0b1111111100000000|0b1111000011110000))print("0b1111111100000000^0b1111000011110000結(jié)果為:",bin(0b1111111100000000^0b1111000011110000))混合運算和數(shù)值類型轉(zhuǎn)換混合運算和隱式轉(zhuǎn)換int、float和complex對象可以混合運算如果表達式中包含complex對象,則其他對象自動轉(zhuǎn)換(隱式轉(zhuǎn)換)為complex對象,結(jié)果為complex對象如果表達式中包含float對象,則其他對象自動轉(zhuǎn)換(隱式轉(zhuǎn)換)為float對象,結(jié)果為float對象顯式轉(zhuǎn)換(強制轉(zhuǎn)換)使用target-type(value)將表達式強制轉(zhuǎn)換為所需的數(shù)據(jù)類型類型轉(zhuǎn)換示例【例4.15】隱式類型轉(zhuǎn)換示例【例4.16】顯式類型轉(zhuǎn)換示例>>>f=123+1.23>>>f#輸出:124.23>>>type(f)#輸出:<class'float'>>>>123+True#True轉(zhuǎn)換為1。輸出:124>>>123+False#False轉(zhuǎn)換為0。輸出:123>>>
int(1.23)
#輸出:1>>>
float(10)
#輸出:10.0>>>
bool("abc")
#輸出:True>>>
float("123xyz")#報錯。ValueError:couldnotconvertstringtofloat:'123xyz'【例4.17】數(shù)值數(shù)據(jù)類型示例(profit.py):計算復(fù)利nb=float(input("請輸入本金:"))#輸入本金并轉(zhuǎn)換為浮點數(shù)nr=float(input("請輸入年利率:"))#輸入年利率并轉(zhuǎn)換為浮點數(shù)ny=int(input("請輸入年份:"))#輸入年份并轉(zhuǎn)換為整數(shù)amount=nb*(1+nr/100)**ny#計算復(fù)利print("本金利率和為:%0.2f"%amount)#輸出復(fù)利,保留兩位小數(shù)內(nèi)置標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)函數(shù)含義實例結(jié)果abs(x)數(shù)值x的絕對值。如果x為復(fù)數(shù),則返回x的模abs(-1.2)abs(1-2j)1.22.23606797749979divmod(a,b)返回a除以b的商和余數(shù)divmod(5,3)(1,2)pow(x,y[,z])返回x的y次冪(x**y)。如果指定z,則為:pow(x,y)%zpow(2,10)pow(2,10,10)10244round(number[,ndigits])四舍五入取整。如果指定ndigits,則保留ndigits小數(shù)round(3.14159)round(3.14159,4)33.1416sum(iterable[,start])求和sum((1,2,3))sum((1,2,3),44)650數(shù)制轉(zhuǎn)換函數(shù)函數(shù)說明示例bin(number)數(shù)值轉(zhuǎn)換為二進制字符串bin(100)#結(jié)果:'0b1100100'hex(number)數(shù)值轉(zhuǎn)換為十六進制字符串hex(100)#結(jié)果:'0x64'oct(number)數(shù)值轉(zhuǎn)換為八進制字符串oct(100)#結(jié)果:'0o144'math模塊和數(shù)學(xué)函數(shù)Python標(biāo)準(zhǔn)模塊math中,提供了許多常用的數(shù)學(xué)函數(shù),包括三角函數(shù)、對數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)math模塊中的函數(shù)不支持復(fù)數(shù),復(fù)數(shù)函數(shù)位于cmath模塊math模塊包含的常量和函數(shù),其API如表4-14(1)~(6)所示math模塊包含的常量和函數(shù)(1)表4-14(1)math的常量和函數(shù)(一):常量名稱說明示例結(jié)果e數(shù)學(xué)常量ee2.718281828459045pi數(shù)學(xué)常量pipi3.141592653589793math模塊包含的常量和函數(shù)(2)表4-14(2)math的常量和函數(shù)(二):數(shù)值運算和表示名稱說明示例結(jié)果ceil(x)返回>=x的最小整數(shù)ceil(1.2),ceil(-1.6)2,-1copysign(x,y)返回符號為y的x的值copysign(1.0,-0.0)-1.0fabs(x)返回x的絕對值fabs(-1.2)1.2factorial(x)返回正整數(shù)x的階乘factorial(10)3628800floor(x)返回<=x的最大整數(shù)floor(1.8),floor(-2.1)1,-3fmod(x,y)返回x%yfmod(5,3)2.0frexp(x)返回(m,e),使得:x==m*2**efrexp(1024)(0.5,11)fsum(iterable)返回序列之和,浮點數(shù)的計算結(jié)果比sum更精確fsum([.1,.1,.1,.1,.1,.1,.1,.1,.1,.1])sum([.1,.1,.1,.1,.1,.1,.1,.1,.1,.1])1.0
0.9999999999999999isfinite(x)判斷x是否為有限值isfinite(float('Infinity'))isfinite(float('-Infinity'))isfinite(float('NaN'))isfinite(float('12.3'))FalseFalseFalseTrueisinf(x)判斷x是否為無窮大isinf(float('Infinity'))isinf(12.3)TrueFalseisnan(x)判斷x是否為非數(shù)值isnan(float('NaN'))isnan(12.3)TrueFalseldexp(x,i)返回x*(2**i)是frexp(x)的反函數(shù)ldexp(2,10)2048.0modf(x)返回x的小數(shù)和整數(shù)部分,結(jié)果為元組modf(-12.3)(-0.3000000000000007,-12.0)trunc(x)將x截為最接近0的整數(shù)trunc(1.2)trunc(-2.8)1-2math模塊包含的常量和函數(shù)(3)表4-14(3)math的常量和函數(shù)(三):冪和對數(shù)運算名稱說明示例結(jié)果exp(x)返回e**xexp(5)148.4131591025766expm1(x)返回e**x–1比exp(x)–1精確expm1(1e-5)exp(1e-5)-11.0000050000166667e-051.0000050000069649e-05log(x)log(x,base])返回logex返回logbasexlog(e)log(e,2)1.01.4426950408889634log1p(x)返回log(1+x)log1p(1)log(2)0.69314718055994530.6931471805599453log2(x)返回log2xlog2(e)1.4426950408889634log10(x)返回log10xlog10(100)2.0pow(x,y)返回xy,即x**ypow(2,8)256.0math模塊包含的常量和函數(shù)(4)表4-14(4)math的常量和函數(shù)(四):三角函數(shù)名稱說明示例結(jié)果acos(x)返回x的反余弦acos(1)0.0asin(x)返回x的反正弦asin(1)1.5707963267948966atan(x)返回x的反正切atan(1)0.7853981633974483atan2(y,x)返回x的atan(y/x)atan2(1,2)0.4636476090008061cos(x)返回x的余弦cos(2*pi)1.0hypot(x,y)返回sqrt(x*x+y*y),即歐幾里德距離hypot(3,4)5.0sin(x)返回x的正弦sin(pi/2)1.0tan(x)返回x的正切tan(pi/4)0.9999999999999999math模塊包含的常量和函數(shù)(5)表4-14(5)math的常量和函數(shù)(五):雙曲線函數(shù)名稱說明示例結(jié)果acosh(x)返回x的雙曲線反余弦acosh(1)0.0asinh(x)返回x的雙曲線反正弦asinh(1)0.8813735870195429atanh(x)返回x的雙曲線反正切atanh(0.1)0.1003353477310756cosh(x)返回x的雙曲線余弦cosh(1)1.5430806348152437sinh(x)返回x的雙曲線正弦sinh(0.1)0.10016675001984403tanh(x)返回x的雙曲線正切tanh(0.1)0.09966799462495582表4-14(6)math的常量和函數(shù)(六):角度弧度轉(zhuǎn)換函數(shù)名稱說明示例結(jié)果degrees(x)將x從弧度轉(zhuǎn)換為角度degrees(pi)180.0radians(x)將x從角度轉(zhuǎn)換為弧度radians(90)1.5707963267948966math模塊應(yīng)用舉例(1)【例4.18】數(shù)學(xué)函數(shù)的使用示例(math_test.py):輸入三條邊長,如果可以構(gòu)成三角形則,求三角形的面積、周長、某邊長所對應(yīng)的高、最長邊長、最短邊長;否則,報錯:“不能構(gòu)成三角形”importmath#三角形三邊a、b、c,必須滿足:三條邊長均大于零,并且任意兩邊之和大于第三邊a=int(input("請輸入邊長a:"))b=int(input("請輸入邊長b:"))c=int(input("請輸入邊長c:"))if(a>0andb>0andc>0anda+b>canda+c>bandb+c>a):h=(a+b+c)/2#周長的一半area=math.sqrt(h*(h-a)*(h-b)*(h-c))#面積perimeter=a+b+c#周長height_a=2*area/a#邊長a所對應(yīng)的高max_side=max(a,b,c)#最長邊長min_side=min(a,b,c)#最短邊長print("三角形的三條邊為:{0}、{1}和{2}".format(a,b,c))print("三角形的面積為:{0:.2f}".format(area))print("三角形的周長為:{0:.2f}".format(perimeter))print("邊長A對應(yīng)的高為:{0:.2f}".format(height_a))print("三角形的最長的邊為:{0:.2f}".format(max_side))print("三角形的最短的邊為:{0:.2f}".format(min_side))else:print("三條邊:{0}、{1}和{2},不能構(gòu)成三角形".format(a,b,c))math模塊應(yīng)用舉例(2)【例4.19】數(shù)學(xué)函數(shù)的使用示例(quadratic.py):求一元二次方程的實數(shù)解。其中,系數(shù)b和c由命令行參數(shù)所確定importmathimportsysb=float(sys.argv[1])c=float(sys.argv[2])discriminant=b*b-4.0*cifdiscriminant>=0:d=math.sqrt(discriminant)print("x1=",(-b+d)/2.0)print("x2=",(-b-d)/2.0)else:print("此方程無實數(shù)解")random模塊和隨機函數(shù)random模塊包含各種偽隨機數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機數(shù)的函數(shù)使用random模塊函數(shù)seed()可以設(shè)置偽隨機數(shù)生成器的種子隨機整數(shù)>>>importrandom>>>random.seed(1)#設(shè)置種子為1>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:4,4,4,4,2,>>>random.seed(1)#重新設(shè)置種子為1,結(jié)果重復(fù)>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>random.seed(10)#重新設(shè)置種子為10>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:5,1,4,4,5,名稱說明示例結(jié)果(隨機)randrange(stop)返回隨機整數(shù)N,N屬于序列[0,stop)foriinrange(10):print(randrange(10),end=',')8,6,7,4,0,9,1,5,4,9,randrange(start,stop[,step])返回隨機整數(shù)N,N屬于序列[start,stop,step)foriinrange(10):print(randrange(1,5),end=',')3,4,1,2,3,4,4,4,1,1,randint(a,b)返回隨機整數(shù)N,使得a<=N<=b,即randrange(a,b+1)foriinrange(10):print(randint(1,5),end=',')1,2,5,5,1,1,1,2,3,4,getrandbits(k)返回隨機整數(shù)N,使得N的位(bit)長為kforiinrange(10):print(getrandbits(2),end=',')0,0,1,2,1,3,1,1,1,1,【例4.20】猜數(shù)游戲(guess.py)首先隨機產(chǎn)生一個1~100以內(nèi)的整數(shù),請用戶猜測具體是哪個數(shù),即:不斷從標(biāo)準(zhǔn)輸入讀取用戶的猜測值,并根據(jù)猜測值給出提示信息:“太大”、“太小”或“正確!”importrandomsecret=random.randrange(1,101)guess=0whileguess!=secret:guess=int(input("請猜測一個100之內(nèi)的數(shù):"))if(guess<secret):print('太小')elif(guess>secret):print('太大')else:print('正確!')隨機系列【例4.21】混排示例(random_shuffle.py):隨機生成撲克牌的四手牌(4個人的牌局,每手牌13張)……tobecontinued假設(shè)表中示例基于如下前提條件:名稱說明示例結(jié)果(隨機)choice(seq)從非空的序列seq中隨機返回一個元素foriinrange(5):print(choice(seq),end=',')e,e,e,a,e,sample(population,k)從非空的序列population隨機抽取k個元素,返回其列表sample(seq,3)['i','u','a']shuffle(x[,random])混排列表??蛇x的random為隨機函數(shù),默認為random()shuffle(seq1);seq1[2,1,5,3,4]>>>fromrandomimport*>>>seq=('a','e','i','o','u');seq1=[1,2,3,4,5]【例4.21】混排示例(random_shuffle.py)importrandom#一副牌:Club(梅花)、Diamond(方塊)、Heart(紅桃)、Spade(黑桃)、2-10,J,Q,K,Acards=['2C','3C','4C','5C','6C','7C','8C','9C','10C','JC','QC','KC','AC','2D','3D','4D','5D','6D','7D','8D','9D','10D','JD','QD','KD','AD','2H','3H','4H','5H','6H','7H','8H','9H','10H','JH','QH','KH','AH','2S','3S','4S','5S','6S','7S','8S','9S','10S','JS','QS','KS','AS']random.shuffle(cards)#混排,洗牌deck1=[];deck2=[];deck3=[];deck4=[]#初始化四手牌foriinrange(13):#發(fā)牌deck1.append(cards.pop())deck2.append(cards.pop())deck3.append(cards.pop())deck4.append(cards.pop())print(deck1);print(deck2);print(deck3);print(deck4)綜合應(yīng)用舉例蒙特卡洛模擬:賭徒破產(chǎn)命運賭徒的最終命運是破產(chǎn):假設(shè)一個賭徒從給定賭資籌碼開始,連續(xù)下注一系列的1個籌碼的賭注,最終結(jié)果賭徒注定會輸光??梢酝ㄟ^隨機模擬來證明該假設(shè),假設(shè)初始賭資為stake個籌碼,每次下注通過隨機數(shù)0和1來判斷輸贏:0的時候籌碼加1、1的時候籌碼減1,籌碼小于0時終止。仿真trials取平均下注次數(shù)【例4.22】賭徒破產(chǎn)命運(gambler1.py)運行程序每次結(jié)果不一樣,但最終都會完成并輸出破產(chǎn)需要的次數(shù)。注意,如果stake數(shù)比較大,則程序運行的時間可能比較長…tobecontinued【例4.23】賭徒贏的概率(gambler2.py)…tobecontinued【例4.22】賭徒破產(chǎn)命運(gambler1.py)importrandomdefgamble(stake,trials):"""返回輸?shù)魋take所需要的次數(shù),模擬仿真trials次取平均值"""total_bets=0#總下注次數(shù)max_cash=stake#最大賭資fortinrange(trials):#模擬trials次取平均cash=stake#籌碼whilecash>0:#持續(xù)下注直到破產(chǎn)#模擬一次下注total_bets+=1ifrandom.randrange(0,2)==0:cash+=1max_cash=max(max_cash,cash)else:cash-=1#print(cash)#print("賭博過程中最大賭資={}".format(max_cash))returnint(total_bets/trials)if__name__=="__main__":print("輸?shù)魗}個籌碼的平均次數(shù):{}".format(1,gamble(1,100)))print("輸?shù)魗}個籌碼的平均次數(shù):{}".format(5,gamble(5,100)))print("輸?shù)魗}個籌碼的平均次數(shù):{}".format(10,gamble(10,100)))print("輸?shù)魗}個籌碼的平均次數(shù):{}".format(20,gamble(20,100)))【例4.23】賭徒贏的概率(gambler2.py)importrandomdefgamble(st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)識標(biāo)牌等制作安裝合同范本
- 設(shè)備技術(shù)研究開發(fā)合同范本
- 音頻制作合同范本
- 低價藍牙耳機轉(zhuǎn)讓合同范本
- 合同范本簽訂
- 臥式加工中心合同范本
- 分租經(jīng)營合同范本
- 合租養(yǎng)蝦合同范例
- 包裝商品采購合同范本
- 加油站油卡合同范本
- 新概念英語第一冊語法練習(xí)
- 無人機法律法規(guī)與安全飛行 第2版 課件 8-2 -無人機人員的法律責(zé)任
- 產(chǎn)品外觀檢驗標(biāo)準(zhǔn)通用
- 《建筑基坑工程監(jiān)測技術(shù)標(biāo)準(zhǔn)》(50497-2019)
- 中國慢性病報告2023
- 2023年江蘇省泰州市高職單招數(shù)學(xué)摸底卷五(含答案)
- 質(zhì)量管理體系中英文縮寫與其解釋
- 歷史文獻學(xué)之文獻校勘給09歷史開第二章
- 中國教育行業(yè)調(diào)查報告-《中國教育行業(yè)白皮書》
- 鑄造廠重要危險源清單
- 自考《建設(shè)監(jiān)理導(dǎo)論04230》歷年真題匯總(帶答案)
評論
0/150
提交評論