實例一、溫度轉換
溫度刻畫的兩種不同體系,是攝氏度和華氏度,
攝氏度:以1標準大氣壓下水的結冰點為0度,沸點為100度,中國等世界大多數國家使用;
華氏度:以1標準大氣壓下水的結冰點為32度,沸點為212度,英美等國家使用;
系,
1,輸入:輸入帶華氏或攝氏標致的溫度值,,
2,處理:根據溫度標致選擇適當的溫度轉換算法,
3,輸出:輸出帶攝氏或華氏的溫度值,
<F標識華氏度,C表示攝氏度,
華氏轉換公式:F=C*1.8+32
攝氏轉換公式:C=(F-32)/1.8
#TempConvert.py
TempStr = input("請輸入帶有符號的溫度值:")
if TempStr[-1] in ['F','f']:
C = (eval(TempStr[0:1])-32)/1.8
print('轉換后的溫度是{:.2f}C'.format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:1])+32
print("轉換后的溫度是{:.2f}F".format(F))
else:
print("輸入格式錯誤")
溫度轉換問題是各類轉換問題的代表性問題,如貨幣轉換、長度轉換、重量轉換、面積轉換等
實例二、天天向上的力量
問題1:千分之一的力量
-一年365天,每天進步千分之一,累計進步多少呢?
-一年365天,每天退步千分之一,累計剩下多少呢?
#DayDayUpQ1.py
dayup=pow(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
問題2:千分之五和白分之一的力量
-一年365天,每天進步千分之五或百分之一,累計退步多少呢?
-一年365天,每天退步千分之五或百分之一,累計退步多少呢?
#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個公作日,每天進步1%
-一年365天,一周2個公作日,每天退步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%一樣?
假設兩個人
-A君:一年365天,每天進步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("工作日的努力參數是:{:.3f}".format(dayfactor))
實例三、python蟒蛇的繪制
參考turtle庫專題內容:python蟒蛇繪制
實例四、文本進度條
1、文本進度條 簡單的開始
#TextProBarV1.py
import time
scale = 10
print("------執行開始------")
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("------執行結束------")
2、文本進度條 單行動態刷新
#TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.1)
3、文本進度條 實例完整效果
#TextProBarV3.py
import time
scale = 50
print("執行開始".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"+"執行結束".center(scale//2,'-'))
實例五、身體質量指數BMI
國際:
#CalBMIv1.py
height, weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]: "))
bmi = weight / pow(height, 2)
print("BMI 數值為:{:.2f}".format(bmi))
who = ""
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25:
who = "正常"
elif 25 <= bmi < 30:
who = "偏胖"
else:
who = "肥胖"
print("BMI 指標為:國際'{0}'".format(who))
國內:
#CalBMIv2.py
height, weight = eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]: "))
bmi = weight / pow(height, 2)
print("BMI 數值為:{:.2f}".format(bmi))
nat = ""
if bmi < 18.5:
nat = "偏瘦"
elif 18.5 <= bmi < 24:
nat = "正常"
elif 24 <= bmi < 28:
nat = "偏胖"
else:
nat = "肥胖"
print("BMI 指標為:國內'{0}'".format(nat))
兩個同時:
#CalBMIv3.py
height, weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]: "))
bmi = weight / pow(height, 2)
print("BMI 數值為:{:.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 指標為:國際'{0}', 國內'{1}'".format(who, nat))
實例六、圓周率的計算
公式法
#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("運行時間是: {:.5f}s".format(perf_counter() - start))
實例七、七段數碼管繪制
版本一:
#SevenDigitsDrawV1.py
import turtle
def drawLine(draw): #繪制單段數碼管
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit): #根據數字繪制七段數碼管
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): #獲得要輸出的數字
for i in date:
drawDigit(eval(i)) #通過eval()函數將數字變為整數
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(): #繪制數碼管間隔
turtle.penup()
turtle.fd(5)
def drawLine(draw): #繪制單段數碼管
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(d): #根據數字繪制七段數碼管
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()
實例八、科赫曲線繪制
#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階科赫曲線長度,階數
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階科赫雪花,階數
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle()
main()
實例九、基本統計值計算
#CalStatisticsV1.py
def getNum(): #獲取用戶不定長度的輸入
nums = []
iNumStr = input("請輸入數字(回車退出): ")
while iNumStr != "":
nums.append(eval(iNumStr))
iNumStr = input("請輸入數字(回車退出): ")
return nums
def mean(numbers): #計算平均值
s = 0.0
for num in numbers:
s = s + num
return s / len(numbers)
def dev(numbers, mean): #計算方差
sdev = 0.0
for num in numbers:
sdev = sdev + (num - mean)**2
return pow(sdev / (len(numbers)-1), 0.5)
def median(numbers): #計算中位數
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() #主體函數
m = mean(n)
print("平均值:{},方差:{:.2},中位數:{}.".format(m, dev(n,m),median(n)))
實例10、文本詞頻統計
Hamlet詞頻統計
#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))
三國演義》人物出場統計(上)(含《三國演義》原文文本)
#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))
《三國演義》人物出場統計(下)(含《三國演義》原文文本)
#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 == "關公" or word == "云長":
rword = "關羽"
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))


返回頂部
刷新頁面
下到頁底