目录

实例一 温度转换

实例二 货币转换

实例三 绘制毛毛虫

实例四 天天向上

实例五 星期几问题

实例六 输出十二星座的标志

实例七 程序计时

实例八 文本进度条

实例九 身体质量指数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计算

输入:对象的身高和体重
处理:利用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))

 

展示