3.1數(shù)字類型及操作
(一)整數(shù)類型
- 可正可負预鬓,沒有取值范圍限制
- pow(x,y)函數(shù):計算X的y次方赊颠,想算多大算多大
四種進制表現(xiàn)形式
- 十進制:1010格二,99,-217
- 二進制:以0b或0B開頭:0b010竣蹦,-0B101
- 八進制:以0o或0O開頭:0o123顶猜,-0O456
- 十六進制:以0x或0X開頭:0x9a,-0X89
(二)浮點類型
與數(shù)學(xué)中實數(shù)的概念一致
- 帶有小數(shù)點及小數(shù)的數(shù)字
- 浮點數(shù)取值范圍和小數(shù)精度都存在限制痘括,但常規(guī)計算可忽略
- 取值范圍數(shù)量級約-10的308次方至10的308次方长窄,精度數(shù)量級10的負16次方滔吠。
注意:浮點數(shù)間運算存在不確定尾數(shù),不是bug
>>>0.1+0.3
0.4
>>>0.1+0.2
0.3000000000000004
原因:計算機中十進制小數(shù)0.1是由53位二進制表示的小數(shù)部分挠日,約10^(-16)
二進制表示小數(shù)疮绷,可以無限接近,但不完全相同
修改:
>>>0.1+0.2==0.3
False
>>>round(0.1+0.2,1)==0.3
True
- round(x嚣潜,d):對x四舍五入冬骚,d是小數(shù)截取位數(shù)
- 浮點數(shù)間運算及比較用round()函數(shù)輔助
- 不確定尾數(shù)一般發(fā)生在10^(-16)左右,round()十分有效
浮點數(shù)可以采用科學(xué)計數(shù)法表示
- 使用字母e或者E作為冪的符號懂算,以10為基數(shù)唉韭,格式如下:
<a>e<b> 表示a*10^(b)
(三)復(fù)數(shù)類型
出現(xiàn)頻率較少
(四)數(shù)字運算操作符
操作符及使用 | 描述 |
---|---|
x+y | 加,x與y之和 |
x-y | 減犯犁,x與y之差 |
x*y | 乘,x與y之積 |
x/y | 除女器,x與y之商 |
x//y | 整數(shù)除酸役,x與y之整數(shù)商 10//3結(jié)果是3 |
+x | x本身 |
-y | y的負值 |
x%y | 余數(shù),模運算 10%3結(jié)果是1 |
x**y | 冪運算驾胆,x的y次冪涣澡,x^y |
二元操作符有對應(yīng)的增強賦值操作符
- xop=y 即x=xopy,其中丧诺,op為二元操作符
類型間可進行混合運算入桂,生成結(jié)果為“最寬”類型
- 三種類型存在一種逐漸“擴展”或“變寬”的關(guān)系
整數(shù) ->浮點數(shù) ->復(fù)數(shù)
數(shù)字運算函數(shù)
函數(shù)及使用 | 描述 |
---|---|
abs(x) | 絕對值,x的絕對值 |
divmod(x驳阎,y) | 商余抗愁,(x//y,x%y)呵晚,同時輸出商和余數(shù)蜘腌。例:divmod(10,3)結(jié)果為(3饵隙,1) |
pow(x,y[,z]) | 冪余撮珠,(x**y)%z,[..]表示參數(shù)z可省略。例:pow(3金矛,pow(3芯急,99),10000)結(jié)果為4587 |
round(x[,d]) | 四舍五入驶俊,d是保留小數(shù)位數(shù)娶耍,默認(rèn)值為0 |
max(X1,X2,,,,,Xn) | 最大值 |
mix(X1,X2,,,,Xn) | 最小值 |
一些以函數(shù)形式提供的數(shù)值運算功能
函數(shù)及使用 | 描述 |
---|---|
int(x) | 將x變成整數(shù),舍棄小數(shù)部分 |
float(x) | 將x變成浮點數(shù)废睦,增加小數(shù)部分 |
complex(x) | 將x變成復(fù)數(shù)伺绽,增加虛數(shù)部分 |
3.2實例3:天天向上的力量
基本問題:持續(xù)的價值
問題1:1‰的力量
#DayDayupQ1.py
dayup=(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
問題2:5‰和1%的力量
#DayDayUpQ2.py
dayfactor=0.005
dayup=pow(1+dayfactor,365)
daydown=pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f})"format(dayup,daydown))
問題3:工作日的力量
- 一年365天,一周5個工作日奈应,每天進步1%
- 一年365天澜掩,一周2個休息日,每天退步1%
#DayDayUpQ3.py
dayup=1.0
dayfactor=0.01
for i in range(365):
if i % 7 in[6,0]:
dayup=dayup*(1-dayfactor)
else:
dayup=dayup*(1+dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
問題4:工作日的努力
- A君:一年365天杖挣,每天進步1%肩榕,不停歇
- B君:一年365天,每周工作5天休息2天惩妇,休息日下降1%株汉,要多努力呢?
for...in..(計算思維)==>def..while...(“笨辦法”試錯)
#DayDayUpQ4.py
def dayup(df):
dayup=1
for i in range(365):
if i % 7 in [6,0]:
dayup=dayup*(1-0.01)
else:
dayup=dayup*(1+df)
return dayup
dayfactor=0.01
while dayUP(dayfactor)<37.78:
dayfactor+=0.001
print("工作日的努力參數(shù)是:{:.3f}".format(dayfactor))
3.3字符串類型及操作
由0個或多個字符組成的有序字符序列
- 字符串由一對單引號或一對雙引號表示
- 字符串是字符的有序序列歌殃,可以對其乔妈;中的字符進行索引
字符串的序號
正向遞增序號和反向遞減序號
字符串切片高級用法
使用[M:N:K]根據(jù)步長對字符串切片
- <字符串>[M:N],M缺失表示至開頭,N缺失表示至結(jié)尾
- <字符串>[M:N:K],根據(jù)步長K對字符串切片
字符串的特殊字符
轉(zhuǎn)義符\
- 轉(zhuǎn)義符表示特定字符的本意
- 轉(zhuǎn)義符形成一些組合氓皱,表達一些不可打印的含義
字符串的操作符
由0個或多個字符組成的有序字符序列
操作符及使用 | 描述 |
---|---|
x+y | 連接兩個字符串x和y |
nx或xn | 復(fù)制n次字符串x |
x in s | 如果x是s的子串路召,返回True,否則返回False |
獲取星期字符串
#weekNamePrintV1.py
weekStr="星期一星期二星期三星期四星期五星期六星期日"
weekId=eval(input("請輸入星期數(shù)字(1-7):"))
pos=(weekId-1)*3
print(weekStr[pos:pos+3])
字符串處理函數(shù)
函數(shù)及使用|描述
len(x)|長度波材,返回字符串的長度
str(x)|任意類型x所對應(yīng)的字符串形式
hex(x)或oct(x)|整數(shù)x的十六進制或八進制小寫形式字符串
Unicode編碼
python字符串的編碼形式
- 統(tǒng)一字符編碼股淡,即覆蓋幾乎所有字符的編碼方式
- 從0到1114111(0*10FFFF)的空間,每個編碼對應(yīng)一個字符
- python字符串中每個字符都是Unicode編碼字符
12星座代表字符
for i in range(12):
print(chr(9800+i),end="")
字符串處理方法
方法及使用 | 描述 |
---|---|
str.lower或str.upper() | 返回字符串的副本廷区,全部字符小寫/大寫 |
str.split(sep=None) | 返回一個列表唯灵,由str根據(jù)sep被分隔的部分組成 |
str.count(sub) | 返回子串sub在str中出現(xiàn)的次數(shù) |
str.replace(old,new) | 返回字符串str副本,所有old子串被替代為new |
str.center(width[,fillchar]) | 字符串str根據(jù)寬度width居中隙轻,fillchar可選 |
str.strip(chars) | 從str中去掉在其左側(cè)和右側(cè)chars中列出的字符 |
str.join(iter) | 在iter變量除最后元素外每個元素后增加一個str |
字符串類型的格式化
格式化是對字符串進行格式表達的方式
- 字符串格式化使用.format()方法埠帕,用法如下:
<模板字符串>.format(<逗號分隔的參數(shù)>)
: 引導(dǎo)符號
<填充> 用于填充的單個字符
<對齊> <左對齊 >右對齊 ^居中對齊
<寬度> 槽設(shè)定的輸出寬度
<,> 數(shù)字的千位分隔符
<.精度> 浮點數(shù)小數(shù)精度或字符串最大輸出長度
<類型> 整數(shù)類型 浮點數(shù)類型
3.4time庫的使用
time庫是python中處理時間的標(biāo)準(zhǔn)庫
- 時間獲染谅獭:time() ctime() gmtime()
- 時間格式化:strftime() strptime()
- 程序計時:sleep()搞监,perf_counter()
函數(shù) | 描述 |
---|---|
time() | 獲取當(dāng)前時間戳,即計算機內(nèi)部時間值镰矿,浮點數(shù) |
ctime() | 獲取當(dāng)前時間并以易讀方式表示琐驴,返回字符串 |
gmtime() | 獲取當(dāng)前時間,表示為計算機可處理的時間格式 |
時間格式化
將時間以合理的方式展示出來
- 格式化:類似字符串格式化秤标,需要有展示模板
- 展示模板由特定的格式化控制符組成
- strftime()方法
函數(shù) | 描述 |
---|---|
strftime(tpl,ts) | tpl是格式化模板字符串绝淡,用來定義輸出效果。ts是計算機內(nèi)部時間類型的變量 |
strptime(str,tpl) | str是字符串形式的時間格式化苍姜。tpl是格式化模板字符串牢酵,用來定義輸入效果 |
程序計時
- 程序計時指測量起止動作所經(jīng)歷事件的過程
- 測量時間:perf_counter()
- 產(chǎn)生時間:sleep()
函數(shù) | 描述 |
---|---|
per_counter() | 返回一個CPU級別的精確時間計數(shù)值,單位為秒衙猪。由于這個計數(shù)值起點不確定馍乙,連續(xù)調(diào)用差值才有意義 |
sleep | s擬休眠時間布近,單位是秒,可以是浮點數(shù) |
3.5文本計數(shù)條
需求分析
- 采用字符串方式打印可以動態(tài)變化的文本進度條
- 進度條需要能在一行中逐漸變化
問題分析
- 采用sleep()模擬一個持續(xù)的進度
- 似乎不那么難
“文本進度條”簡單開始
#TextProBarV1.py
import time
scale=10
print("------執(zhí)行開始------")
for i range(scale+1)
a='*' * 1
b='.' * (scale-i)
c=(i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("------執(zhí)行結(jié)束------")
單行動態(tài)刷新
#TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
完整效果
#TextProBarV3.py
import time
scale = 50
print("執(zhí)行開始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"執(zhí)行結(jié)束".center(scale//2,'-'))