目录
实例一 温度转换
实例二 货币转换
实例三 绘制毛毛虫
实例四 天天向上
实例五 星期几问题
实例六 输出十二星座的标志
实例七 程序计时
实例八 文本进度条
实例九 身体质量指数BMI计算
实例十 蒙特卡罗方法计算圆周率
设计思路:从程序的角度看,有数据的读入--数据处理--数据输出三个部分组成。首先通过终端(用户输入)读取到温度数据,然后根据后缀判断温度值的类型(华氏度or摄氏度)进行温度转换,最后将转换的结果输出到终端界面(显示给用户)。就是这么一个简单的处理。
利用公式(华氏-摄氏):F=C×1.8+32 C=(F-32)÷1.8
代码实现
根据用户输入数据的后缀进行相应的转换输出,否者输出‘input error’
#t.py
TempStr = input("input please tempture:")
if TempStr[-1] in ['F','f']:
C = (eval(TempStr[0:-1]) - 32)/1.8
print("Temp:{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("Temp:{:.2f}F".format(F))
else:
print("input error!!!")
演示
逐行分析
以'#'开头表示注释行,不会被解释。这里仅仅表示脚本文件名为t.py
#t.py
使用input函数从用户终端读取用户输入的数据,并将字符串的形式赋值给TempStr这个变量
TempStr = input("input please tempture:")
检索TempStr的最后一个字符,如果在后面的列表中就进行相应的转换
if TempStr[-1] in ['F','f']:
TempStr[0:-1]表示对字符串进行分割,割掉最后一个字符。eval将字符串两边的引号去掉,使解释器可以把其当成正常的语句。这个表达式总体上完成了温度的转换(F->C)
C = (eval(TempStr[0:-1]) - 32)/1.8
将转换后的数值,格式化输出。{:.2f }表示保留两位有效数字输出。
print("Temp:{:.2f}C".format(C))
完成对摄氏温度到华氏度的转换
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("Temp:{:.2f}F".format(F))
如果上面没有匹配就报错
else:
print("input error!!!")
设计思路:对上一个实例有一些小小的改进。程序读取用户输入的的货币面值(RMB或者USD),然后进行价值的转换,将转换后的货币面值再通过打印终端,送给用户显示。
转换公式:1美元 = 6.78人民币。
代码
CurStr = input()
if CurStr[:3] == "RMB": #[:3]用于提取字符串开始位置到3位置的子串(数值部分),然后判断字符串是否相等于"RMB"
print("USD{:.2f}".format(eval(CurStr[3:])/6.78)) #进行公式转换,并format方法格式化输出
elif CurStr[:3] in ['USD']:
print("RMB{:.2f}".format(eval(CurStr[3:])*6.78))
使用第三方库的好处,一方面是省的我们去操心底层代码是如何控制硬件的,另一方面就是让我们以少的代码量去实现复杂的功能。这个例程是使用标准库turtle库中的函数,实现图形的绘制,画一个毛毛虫。重点还是面向对象的思想与功能的实现。
Python是一个面向对象思想的编程,故本例程的对象
画布对象:实际上是一个窗口,通过设置画布的属性,可以改变它的位置和大小。
画笔对象:通过画笔和画布实现图形的绘制,可以设置画笔属性(决定线条的粗细、颜色...),通过画笔动作实现线条绘制。
代码
#test.py
#from turtle inport *
import turtle
turtle.setup(650, 350, 200, 200) #设置画布位置和大小
turtle.penup() #抬起画笔
turtle.fd(-250) #画笔直线移动-250单位
turtle.pendown() #放下画笔
turtle.pensize(25) #设置画笔宽度
turtle.pencolor("purple") #设置画笔颜色
turtle.seth(-40) #画笔方向 -40°
for i in range(4):
turtle.circle(40, 80) #画轨迹(半径40,弧度80)
turtle.circle(-40, 80) #毛毛虫身体
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180) #毛毛虫头部
turtle.fd(fd * 2/3)
turtle.done() #画布done --程序不退出
展示
近来科技发展越来越迅速,每过一段时间都会有新的词汇出现。面对这个变化飞快的世界,只有不断的迭代自己,才能跟上时代的变化,而不进步实际上就是一种倒退。我们现在都处于历史的十字路口上,请问,你会怎么做?
设计思路:
一年365天,每天进步1%,累计进步多少呢?
一年365天,每天退步1%,累计剩下多少呢?
一年365天,工作日进步1%,累计进步多少呢?
工作日模式要努力到什么水平,才能与每天努力1%一样?
代码1
#daydayup.py
dayfactor = 0.01 #每天改变%1
dayup = 1.0
daydown = 1.0
dayup = pow( 1+dayfactor, 365 )
daydown = pow( 1-dayfactor, 365 )
print("每天1%,一年以后 学习者:{:.2f} 荒废者{:.2f}".format(dayup,daydown))
dayup = 1.0
daydown = 1.0
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup*(1-dayfactor)
else:
dayup = dayup*(1+dayfactor)
print("工作日学习1% 周末玩耍.一年以后:{:.2f}".format(dayup))
演示
代码2 如何努力才能达到目标值
#dayup.py
#dayup函数
#每天努力df
#一年之后的效果
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))
演示
设计思路:程序读入用户输入的数字,转换成为对应的星期。重点理解字符串的拼接用法
代码
#weekname.py
#处理字符串相关函数
weekStr = "一二三四五六日"
weekId = eval( input("请输入星期数字(1-7):") )
print( "星期" + weekStr[weekId-1] ) #拼接字符串
演示
设计思路:python中字符编码统一使用Unicode码,根据Unicode码制,输出十二星座的logo;使用chr和ord函数,完成字符和unicode码的相互转换。
代码
for i in range(12):
print( chr(9800+i), end=" " ) #chr函数根据unicode码,返回相应的字符
print( ord( chr(9800+i) ), end="\n" ) #ord函数根据字符,返回对应的unicode码
演示
设计思路:利用Python标准库time函数,实现对程序执行过程的计时统计。
代码
#time.py
from time import *
start = perf_counter() #获取时间点start,为起始时间
sleep(2) #睡眠2s
end = perf_counter() #获取时间点end,为结束时间
print("{}".format(end-start)) #输出时间差,为程序执行的时间
演示
设计思路:编辑Python代码,结合time库函数的计时功能与print打印函数,实现进度条的显示。在本程序中,通过for循环遍历数列来模拟文本下载/上传的过程,结合time库函数延时函数来实现这个过程;遍历过程中通过对终端界面的行刷新来模拟进度条的动态显示,通过print函数来实现打印输出功能,再通过time库函数的计时功能来实现对进度条时间进度的说明。
PS:在实际进度条实现上,先给进度条一个较慢的速度,再最后提高进度条的速度显示,这样可以给用户一个较好的心里体验。
代码
#textBar.py
import time
scale = 50
print("执行开始".center(scale//2,"-")) #居中打印 两边填充 -
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i # i个'*'
b = '.' * (scale-i) # (scale-i)个'.'
c = (i/scale)*100 # 百分数
dur = time.perf_counter() - start #用时
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='') #格式化输出,注意ends参数设置不换行
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-')) #居中打印 两边填充 -
演示
输入:对象的身高和体重
处理:利用BMI = 体重 (kg) / 身高2 (m2),计算出BMI指标,判断用户的健康程度
输出:分别按照国内和国际两种标准,输出用户的健康程度
PS:重点学习if多分支语句的处理思想
height, weight = eval(input("请输入身高(m)和体重(\公斤)[逗号隔开]:"))
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 = "偏胖","肥胖"
print("国内标准:{} 国际标准:{}".format(who,nat))
展示
圆周率是一个无理数,没有一个数学公式可以精确的表示。对圆周率的计算有两种方法,一种是使用数学近视公式来计算;另外一种就是蒙特卡罗方法了,在本例程中,使用大量随机的离散点来近视区域的面积,使用面积的比例来求圆周率的值。这里使用random函数来产生随机数,使用time库时间计时来计算程序运行的时间。
输入:抛物点数量
处理:计算每一个点到圆心的距离,统计在圆内的点的数量
输出:圆周率
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))
展示