實(shí)例一、溫度轉(zhuǎn)換
溫度刻畫的兩種不同體系,是攝氏度和華氏度,
攝氏度:以1標(biāo)準(zhǔn)大氣壓下水的結(jié)冰點(diǎn)為0度,沸點(diǎn)為100度,中國等世界大多數(shù)國家使用;
華氏度:以1標(biāo)準(zhǔn)大氣壓下水的結(jié)冰點(diǎn)為32度,沸點(diǎn)為212度,英美等國家使用;
系,
1,輸入:輸入帶華氏或攝氏標(biāo)致的溫度值,,
2,處理:根據(jù)溫度標(biāo)致選擇適當(dāng)?shù)臏囟绒D(zhuǎn)換算法,
3,輸出:輸出帶攝氏或華氏的溫度值,
<F標(biāo)識華氏度,C表示攝氏度,
華氏轉(zhuǎn)換公式:F=C*1.8+32
攝氏轉(zhuǎn)換公式:C=(F-32)/1.8
#TempConvert.py TempStr = input("請輸入帶有符號的溫度值:") if TempStr[-1] in ['F','f']: C = (eval(TempStr[0:1])-32)/1.8 print('轉(zhuǎn)換后的溫度是{:.2f}C'.format(C)) elif TempStr[-1] in ['C','c']: F = 1.8*eval(TempStr[0:1])+32 print("轉(zhuǎn)換后的溫度是{:.2f}F".format(F)) else: print("輸入格式錯(cuò)誤")
溫度轉(zhuǎn)換問題是各類轉(zhuǎn)換問題的代表性問題,如貨幣轉(zhuǎn)換、長度轉(zhuǎn)換、重量轉(zhuǎn)換、面積轉(zhuǎn)換等
實(shí)例二、天天向上的力量
問題1:千分之一的力量
-一年365天,每天進(jìn)步千分之一,累計(jì)進(jìn)步多少呢?
-一年365天,每天退步千分之一,累計(jì)剩下多少呢?
#DayDayUpQ1.py dayup=pow(1.001,365) daydown=pow(0.999,365) print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
問題2:千分之五和白分之一的力量
-一年365天,每天進(jìn)步千分之五或百分之一,累計(jì)退步多少呢?
-一年365天,每天退步千分之五或百分之一,累計(jì)退步多少呢?
#DayDayUpQ2.py dayfactor=0.005 dayup=pow(1+dayfactor,365) daydown=pow(1-dayfactor,365) print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#DayDayUpQ2.py dayfactor=0.01 dayup=pow(1+dayfactor,365) daydown=pow(1-dayfactor,365) print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
問題3:工作日的力量
-一年365天,一周5個(gè)公作日,每天進(jìn)步1%
-一年365天,一周2個(gè)公作日,每天退步1%
-這種工作日的力量,如何呢?
#DayDayUp3.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:工作日的努力
-工作日模式要努力到什么水平,才能與每天努力1%一樣?
假設(shè)兩個(gè)人
-A君:一年365天,每天進(jìn)步1%,不停歇
-B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
#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))
實(shí)例三、python蟒蛇的繪制
參考turtle庫專題內(nèi)容:python蟒蛇繪制
實(shí)例四、文本進(jìn)度條
1、文本進(jìn)度條 簡單的開始
#TextProBarV1.py import time scale = 10 print("------執(zhí)行開始------") for i in range(scale+1): a = '*' * i b = '.' * (scale - i) c = (i/scale)*100 print("{:^3.0f}%[{}->{}]".format(c,a,b)) time.sleep(0.1) print("------執(zhí)行結(jié)束------")
2、文本進(jìn)度條 單行動態(tài)刷新
#TextProBarV2.py import time for i in range(101): print("\r{:3}%".format(i), end="") time.sleep(0.1)
3、文本進(jìn)度條 實(shí)例完整效果
#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,'-'))
實(shí)例五、身體質(zhì)量指數(shù)BMI
國際:
#CalBMIv1.py height, weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]: ")) bmi = weight / pow(height, 2) print("BMI 數(shù)值為:{:.2f}".format(bmi)) who = "" if bmi < 18.5: who = "偏瘦" elif 18.5 <= bmi < 25: who = "正常" elif 25 <= bmi < 30: who = "偏胖" else: who = "肥胖" print("BMI 指標(biāo)為:國際'{0}'".format(who))
國內(nèi):
#CalBMIv2.py height, weight = eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]: ")) bmi = weight / pow(height, 2) print("BMI 數(shù)值為:{:.2f}".format(bmi)) nat = "" if bmi < 18.5: nat = "偏瘦" elif 18.5 <= bmi < 24: nat = "正常" elif 24 <= bmi < 28: nat = "偏胖" else: nat = "肥胖" print("BMI 指標(biāo)為:國內(nèi)'{0}'".format(nat))
兩個(gè)同時(shí):
#CalBMIv3.py height, weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]: ")) bmi = weight / pow(height, 2) print("BMI 數(shù)值為:{:.2f}".format(bmi)) who, nat = "", "" if bmi < 18.5: who, nat = "偏瘦", "偏瘦" elif 18.5 <= bmi < 24: who, nat = "正常", "正常" elif 24 <= bmi < 25: who, nat = "正常", "偏胖" elif 25 <= bmi < 28: who, nat = "偏胖", "偏胖" elif 28 <= bmi < 30: who, nat = "偏胖", "肥胖" else: who, nat = "肥胖", "肥胖" print("BMI 指標(biāo)為:國際'{0}', 國內(nèi)'{1}'".format(who, nat))
實(shí)例六、圓周率的計(jì)算
公式法
#CalPiV1.py pi = 0 N = 100 for k in range(N): pi += 1/pow(16,k)*( \ 4/(8*k+1) - 2/(8*k+4) - \ 1/(8*k+5) - 1/(8*k+6) ) print("圓周率值是: {}".format(pi))
蒙特卡羅方法
#CalPiV2.py from random import random from time import perf_counter DARTS = 1000*1000 hits = 0.0 start = perf_counter() for i in range(1, DARTS+1): x, y = random(), random() dist = pow(x ** 2 + y ** 2, 0.5) if dist <= 1.0: hits = hits + 1 pi = 4 * (hits/DARTS) print("圓周率值是: {}".format(pi)) print("運(yùn)行時(shí)間是: {:.5f}s".format(perf_counter() - start))
實(shí)例七、七段數(shù)碼管繪制
版本一:
#SevenDigitsDrawV1.py import turtle def drawLine(draw): #繪制單段數(shù)碼管 turtle.pendown() if draw else turtle.penup() turtle.fd(40) turtle.right(90) def drawDigit(digit): #根據(jù)數(shù)字繪制七段數(shù)碼管 drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False) drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False) drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False) drawLine(True) if digit in [0,2,6,8] else drawLine(False) turtle.left(90) drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False) drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False) drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False) turtle.left(180) turtle.penup() turtle.fd(20) def drawDate(date): #獲得要輸出的數(shù)字 for i in date: drawDigit(eval(i)) #通過eval()函數(shù)將數(shù)字變?yōu)檎麛?shù) def main(): turtle.setup(800, 350, 200, 200) turtle.penup() turtle.fd(-300) turtle.pensize(5) drawDate('20181010') turtle.hideturtle() turtle.done() main()
版本二:
#SevenDigitsDrawV2.py import turtle, time def drawGap(): #繪制數(shù)碼管間隔 turtle.penup() turtle.fd(5) def drawLine(draw): #繪制單段數(shù)碼管 drawGap() turtle.pendown() if draw else turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def drawDigit(d): #根據(jù)數(shù)字繪制七段數(shù)碼管 drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False) drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False) drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False) drawLine(True) if d in [0,2,6,8] else drawLine(False) turtle.left(90) drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False) drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False) drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False) turtle.left(180) turtle.penup() turtle.fd(20) def drawDate(date): turtle.pencolor("red") for i in date: if i == '-': turtle.write('年',font=("Arial", 18, "normal")) turtle.pencolor("green") turtle.fd(40) elif i == '=': turtle.write('月',font=("Arial", 18, "normal")) turtle.pencolor("blue") turtle.fd(40) elif i == '+': turtle.write('日',font=("Arial", 18, "normal")) else: drawDigit(eval(i)) def main(): turtle.setup(800, 350, 200, 200) turtle.penup() turtle.fd(-350) turtle.pensize(5) # drawDate('2018-10=10+') drawDate(time.strftime('%Y-%m=%d+',time.gmtime())) turtle.hideturtle() turtle.done() main()
實(shí)例八、科赫曲線繪制
#KochDrawV1.py import turtle def koch(size, n): if n == 0: turtle.fd(size) else: for angle in [0, 60, -120, 60]: turtle.left(angle) koch(size/3, n-1) def main(): turtle.setup(800,400) turtle.penup() turtle.goto(-300, -50) turtle.pendown() turtle.pensize(2) koch(600,3) # 0階科赫曲線長度,階數(shù) turtle.hideturtle() main()
科赫雪花繪制
#KochDrawV2.py import turtle def koch(size, n): if n == 0: turtle.fd(size) else: for angle in [0, 60, -120, 60]: turtle.left(angle) koch(size/3, n-1) def main(): turtle.setup(600,600) turtle.penup() turtle.goto(-200, 100) turtle.pendown() turtle.pensize(2) level = 3 # 3階科赫雪花,階數(shù) koch(400,level) turtle.right(120) koch(400,level) turtle.right(120) koch(400,level) turtle.hideturtle() main()
實(shí)例九、基本統(tǒng)計(jì)值計(jì)算
#CalStatisticsV1.py def getNum(): #獲取用戶不定長度的輸入 nums = [] iNumStr = input("請輸入數(shù)字(回車退出): ") while iNumStr != "": nums.append(eval(iNumStr)) iNumStr = input("請輸入數(shù)字(回車退出): ") return nums def mean(numbers): #計(jì)算平均值 s = 0.0 for num in numbers: s = s + num return s / len(numbers) def dev(numbers, mean): #計(jì)算方差 sdev = 0.0 for num in numbers: sdev = sdev + (num - mean)**2 return pow(sdev / (len(numbers)-1), 0.5) def median(numbers): #計(jì)算中位數(shù) sorted(numbers) size = len(numbers) if size % 2 == 0: med = (numbers[size//2-1] + numbers[size//2])/2 else: med = numbers[size//2] return med n = getNum() #主體函數(shù) m = mean(n) print("平均值:{},方差:{:.2},中位數(shù):{}.".format(m, dev(n,m),median(n)))
實(shí)例10、文本詞頻統(tǒng)計(jì)
Hamlet詞頻統(tǒng)計(jì)
#CalHamletV1.py def getText(): txt = open("hamlet.txt", "r").read() txt = txt.lower() for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~': txt = txt.replace(ch, " ") #將文本中特殊字符替換為空格 return txt hamletTxt = getText() words = hamletTxt.split() counts = {} for word in words: counts[word] = counts.get(word,0) + 1 items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(10): word, count = items[i] print ("{0:<10}{1:>5}".format(word, count))
三國演義》人物出場統(tǒng)計(jì)(上)(含《三國演義》原文文本)
#CalThreeKingdomsV1.py import jieba txt = open("threekingdoms.txt", "r", encoding='utf-8').read() words = jieba.lcut(txt) counts = {} for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word,0) + 1 items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] print ("{0:<10}{1:>5}".format(word, count))
《三國演義》人物出場統(tǒng)計(jì)(下)(含《三國演義》原文文本)
#CalThreeKingdomsV2.py import jieba excludes = {"將軍","卻說","荊州","二人","不可","不能","如此"} txt = open("threekingdoms.txt", "r", encoding='utf-8').read() words = jieba.lcut(txt) counts = {} for word in words: if len(word) == 1: continue elif word == "諸葛亮" or word == "孔明曰": rword = "孔明" elif word == "關(guān)公" or word == "云長": rword = "關(guān)羽" elif word == "玄德" or word == "玄德曰": rword = "劉備" elif word == "孟德" or word == "丞相": rword = "曹操" else: rword = word counts[rword] = counts.get(rword,0) + 1 for word in excludes: del counts[word] items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(10): word, count = items[i] print ("{0:<10}{1:>5}".format(word, count))