实例一、温度转换
温度刻画的两种不同体系,是摄氏度和华氏度,
摄氏度:以1标准大气压下水的结冰点为0度,沸点为100度,中国等世界大多数国家使用;
华氏度:以1标准大气压下水的结冰点为32度,沸点为212度,英美等国家使用;
系,
1,输入:输入带华氏或摄氏标致的温度值,,
2,处理:根据温度标致选择适当的温度转换算法,
3,输出:输出带摄氏或华氏的温度值,
<F标识华氏度,C表示摄氏度,
华氏转换公式:F=C*1.8+32
摄氏转换公式:C=(F-32)/1.8
1 2 3 4 5 6 7 8 9 10 | #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天,每天退步千分之一,累计剩下多少呢?
1 2 3 4 | #DayDayUpQ1.py dayup = pow ( 1.001 , 365 ) daydown = pow ( 0.999 , 365 ) print ( "向上:{:.2f},向下:{:.2f}" . format (dayup,daydown)) |
问题2:千分之五和白分之一的力量
-一年365天,每天进步千分之五或百分之一,累计退步多少呢?
-一年365天,每天退步千分之五或百分之一,累计退步多少呢?
1 2 3 4 5 | #DayDayUpQ2.py dayfactor = 0.005 dayup = pow ( 1 + dayfactor, 365 ) daydown = pow ( 1 - dayfactor, 365 ) print ( "向上:{:.2f},向下:{:.2f}" . format (dayup,daydown)) |
1 2 3 4 5 | #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%
-这种工作日的力量,如何呢?
1 2 3 4 5 6 7 8 9 | #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%,要多努力呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 | #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、文本进度条 简单的开始
1 2 3 4 5 6 7 8 9 10 11 | #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、文本进度条 单行动态刷新
1 2 3 4 5 | #TextProBarV2.py import time for i in range ( 101 ): print ( "\r{:3}%" . format (i), end = "") time.sleep( 0.1 ) |
3、文本进度条 实例完整效果
1 2 3 4 5 6 7 8 9 10 11 12 13 | #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
国际:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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)) |
国内:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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)) |
两个同时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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)) |
实例六、圆周率的计算
公式法
1 2 3 4 5 6 7 8 | #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)) |
蒙特卡罗方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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)) |
实例七、七段数码管绘制
版本一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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() |
版本二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #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() |
实例八、科赫曲线绘制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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() |
科赫雪花绘制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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() |
实例九、基本统计值计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #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词频统计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #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)) |
三国演义》人物出场统计(上)(含《三国演义》原文文本)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #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)) |
《三国演义》人物出场统计(下)(含《三国演义》原文文本)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #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)) |