实例一、温度转换
温度刻画的两种不同体系,是摄氏度和华氏度,
摄氏度:以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.pyTempStr = 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.pydayup=pow(1.001,365)daydown=pow(0.999,365)print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown)) |
问题2:千分之五和白分之一的力量
-一年365天,每天进步千分之五或百分之一,累计退步多少呢?
-一年365天,每天退步千分之五或百分之一,累计退步多少呢?
1 2 3 4 5 | #DayDayUpQ2.pydayfactor=0.005dayup=pow(1+dayfactor,365)daydown=pow(1-dayfactor,365)print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown)) |
1 2 3 4 5 | #DayDayUpQ2.pydayfactor=0.01dayup=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.pydayup=1.0dayfactor=0.01for 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.pydef 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 dayupdayfactor=0.01while dayUP(dayfactor)<37.78: dayfactor+=0.001print("工作日的努力参数是:{:.3f}".format(dayfactor)) |
实例三、python蟒蛇的绘制
参考turtle库专题内容:python蟒蛇绘制
实例四、文本进度条
1、文本进度条 简单的开始
1 2 3 4 5 6 7 8 9 10 11 | #TextProBarV1.pyimport timescale = 10print("------执行开始------")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.pyimport timefor 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.pyimport timescale = 50print("执行开始".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.pyheight, 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.pyheight, 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.pyheight, 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.pypi = 0N = 100for 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.pyfrom random import randomfrom time import perf_counterDARTS = 1000*1000hits = 0.0start = 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 + 1pi = 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.pyimport turtledef 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.pyimport turtle, timedef 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.pyimport turtledef 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.pyimport turtledef 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.pydef getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入数字(回车退出): ") while iNumStr != "": nums.append(eval(iNumStr)) iNumStr = input("请输入数字(回车退出): ") return numsdef 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 medn = 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.pydef getText(): txt = open("hamlet.txt", "r").read() txt = txt.lower() for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~': txt = txt.replace(ch, " ") #将文本中特殊字符替换为空格 return txthamletTxt = getText()words = hamletTxt.split()counts = {}for word in words: counts[word] = counts.get(word,0) + 1items = 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.pyimport jiebatxt = 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) + 1items = 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.pyimport jiebaexcludes = {"将军","却说","荆州","二人","不可","不能","如此"}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) + 1for 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)) |



返回顶部
刷新页面
下到页底