Python语言程序设计(北京理工大学MOOC)1-5周

第一周

温度转换源程序:

#TempConvert.py
TempStr = input("请输入带有符号的温度值:")
if TempStr[0] in ['C','c']:
    F = 1.8*eval(TempStr[1:-1])+32
    print('转换后的温度值为F{:.2f}'.format(F))
elif TempStr[0] in ['F','f']:
    C = (eval(TempStr[1:-1])-32)/1.8
    print('转换后的温度值为C{:.2f}'.format(C))
else:
    print('输入格式错误')
  1. eval(): 去掉参数最外侧引号并执行余下语句的函数

eval(“1”)
1
eval(“1+2”)
3
eval(‘“1+2”’)
‘1+2’
eval(‘print(“hello”)’)
hello

  1. 字符串序号问题及应用
    字符串存在以下两种序号标号方式。

    TempStr = “0123456789”
    字符串可以进行检索、切片
    检索:TempStr[1]表示字符串第二个元素即1
    切片:TempStr[1:-1]表示的是去除第一个元素剩下的部分。即TempStr = “123456789”
    带步长的切片:TempStr[1:-1:2],以步长为2进行切片。即TempStr = “13579”
    巧妙切片应用:倒序字符串元素:TempStr[::-1],结果即:TempStr = “9876543210”

  2. 字符串表示问题
    单引号、 双引号、 三引号都可以用来表示字符串。
    单引号用于处理字符串中包含双引号情况;
    双引号用于处理字符串中包含单引号情况;
    三引号用于处理字符串同时包含单双、双引号情况;也可以用来注释多行代码。
    当然也可以不用这样做,使用转义符\,也可以。

  3. 字符串部分内建函数
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 字符串格式化 str.format()
    主要是理解槽的概念及使用方法,最常见的 str.format() 格式化数字的方法:

print("{:.2f}".format(3.1415926));
3.14

还可以进行数据的强制转换,转换成相应的二进制八进制十六进制等。可以看手册,视频讲解在3.3节倒数第二个视频。

第二周

蟒蛇图形绘制源程序:

import turtle
#宽,高,起始横坐标,起始纵坐标,最小单位是像素点
turtle.setup(650, 350, 200, 200)
turtle.penup()# 画笔抬起
turtle.forward(-250)# 朝着目前方向直线前进,右边为正
turtle.pendown()# 画笔落下
turtle.pensize(25)#画笔宽度
turtle.pencolor("purple")# 画笔颜色,小写字符串,也可以用RGB的三个数值,
turtle.seth(-40)# seth()改变海龟行驶方向,但只改变行驶方向不行进
for i in range(4):
    turtle.circle(40, 80)#做曲线,第一个参数默认圆心在海龟左侧R距离的位置,第二个参数是角度默认360,正负代表方向,
    turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.forward(40)
turtle.circle(16, 180)
turtle.forward(40*2/3)
turtle.done()# 将程序运行设计为需手动退出

  1. 库引用 及 import
    import<库名>
    <库名>.<函数名>(<函数参数>)

    也可以使用** from <库名>import * **,但是不推荐,当库多了的时候容易混淆且容易重名。如果嫌每次打库名麻烦,可以使用:
    import<库名>as<库别名>
    <库别名>.<函数名>(<函数参数>)

    库别名可以简单用几个缩写代替。
    2.turtle部分内建函数
    1)turtle.pensize():设置线条的粗细;
    2)turtle.speed():设置绘制的速度,1-10,1最慢,10最快;
    3)turtle.begin_fill():准备开始填充图形;
    4)turtle.circle(50,steps=3):circle函数在之前用到过,是画一个半径为radius的圆,这里是扩展,steps表示在半径为50的圆内的内置steps多边形;
    5)turtle.end_fill():填充完成;
    6)turtle.write(s,font=(“font-name”,font_size,”font_type”)):写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;
    7)turtle.hideturtle():隐藏箭头显示;
    8)turtle.backward(d):与forward()函数对应,这里是从尾部绘制线条和箭头到头部;
    9)turtle.left(angle):逆时针转动箭头方向;
    10)turtle.undo():撤销上一个turtle动作;
    11)turtle.screensize(w,h):设置turtle窗口的长和宽;
    12)turtle.clear():清空turtle窗口,但是turtle的位置和状态不会改变;
    13)turtle.reset():清空窗口,重置turtle状态为起始状态;
    14)turtle.showturtle():与hideturtle()函数对应;

  2. for <变量> in range(<函数名>):
    **range():**产生循环序列
    **range(N):**产生0到N-1的证书序列,共N个
    **range(M,N):**产生M到N-1的证书序列,共N-M个

range(5)
0,1,2,3,4
range(2.5)
2,3,4

最常用的还是和*for i in range(N):**一起构成循环语句,实际上就是在给i不停的赋值达到控制循环次数的目的。

第三周

天天向上的力量源程序:

def dayup(df):
    day_value = 1
    for i in range(365):
        if i % 7 in [6, 0]:
            day_value = day_value * (1 - daydown_factor)
        else:
            day_value = day_value * (1 + dayup_factor)
    return day_value

daydown_factor = 0.01
dayup_factor = 0.01
while dayup(dayup_factor) < 37.78:
    dayup_factor = dayup_factor + 0.001
print("工作日需要努力的参数是{:.3f}".format(dayup_factor))

涉及了一个函数调用,不做过多解释,与视频程序相比优化了一下变量方便修改。

进度条源程序:

import time# 导入time库
scale = 100# 设置范围
print("执行开始".center(scale//2,"-"))# 执行开始标题,用center建立两侧符号
useing_time = time.perf_counter()# perf_counter()#用于获取当前值
for i in range(101):
    a = '*' * i
    b = '-' * (scale-i)
    c = (i/scale) * 100# 百分比
    useing_time = time.perf_counter() - useing_time# perf_counter()#再次获取当前值并做差获得程序运行时间
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, useing_time), end=" ")
    time.sleep(0.1)#休眠0.1s,以免过程太快无法观察。
print("\n"+"执行结束".center(scale//2,"-"))# 由于之前光标回到开头且没有换行,因此加换行符避免覆盖

  1. time库的使用 . 获取当前系统时间的方法
    ctime()函数获取当前时间并以易读方式表示,返回字符串

time.ctime()
‘Fri Jan 26 12:11:16 2018’

另外一种获得时间(格式化)的方法是使用**strftime(tpl,ts)**函数进行表示。相关格式化方法可以查手册或者看视频3.4第三个视频。
在这里插入图片描述

  1. 程序计时
    在这里插入图片描述
    在这里插入图片描述

第四周

BMI源程序:

while True :
    height, weight = eval(input("请输入身高(米),体重(千克):"))
    BMI = weight / pow(height, 2)
    print("BMI值为{:.2f}".format(BMI))
    if BMI < 18.5:
        International_Bmi, national_Bmi = "偏瘦", "偏瘦"
    elif 18.5 < BMI < 24:
        International_Bmi, national_Bmi = "正常", "正常"
    elif 24 < BMI < 25:
        International_Bmi, national_Bmi = "正常", "偏胖"
    elif 25 < BMI < 28:
        International_Bmi, national_Bmi = "偏胖", "偏胖"
    elif 28 < BMI < 30:
        International_Bmi, national_Bmi = "偏胖", "肥胖"
    elif 30 < BMI:
        International_Bmi, national_Bmi = "肥胖", "肥胖"
    print("国际BMI值分类为{},国内BMI值分类为{}".format(International_Bmi, national_Bmi))

程序与视频中稍作修改,能够反复输入数据不用重复手动运行。

  1. random库
    random是使用随机数的Python标准库,主要用于生产随机数。
    用法:import random
    在这里插入图片描述
    随机数的产生是由种子唯一确定的,因此只要是每次seed一样,那么产生的随机数也是一样的。因此也可以称其为伪随机数。如果不指定种子,那么种子默认是系统时间(精确到微妙),因此调用random函数时产生的随机数就不一样。
    那什么时候需要指定种子?
    当你的程序需要复现上次随机数据产生的结果的时候需要指定种子。

例子如下:
在这里插入图片描述

  1. 其他随机扩展函数
    在这里插入图片描述
    Python浮点数是小数点后16位
    在这里插入图片描述
    求取π值(蒙特卡洛法)源程序
import time
import random
Draft = 2000 * 2000
star = time.perf_counter()
Hit = 0
for i in range (Draft):
    Dot_X, Dot_Y = random.random(),random.random(),
    if pow(Dot_X*Dot_X + Dot_Y*Dot_Y,0.5) < 1:
        Hit = Hit + 1
pi = 4*(Hit/Draft)
print("π值为{:.16f}".format(pi))
print("程序所花费时间为{:.2f}".format(time.perf_counter()-star))

调用了time库和random库,time库可以省略。
蒙特卡洛方法我觉得就是老师讲的几何法,通过不断的往正方形里面撒点,最后统计到原点距离小于1的点有多少个来逼近π值,点越多精度越高,这一点可以通过修改Draft的值来确定(不能太大,不然机器跑不出来)。

第五周

七段数码管源程序(显示系统时间)

import time
import turtle
def draw_gap():
    turtle.up()
    turtle.fd(5)
# line作为参数判断这一条线是否需要画下
def draw_line(line):
    turtle.down() if line else turtle.up()
    turtle.fd(50)   # 前进或者画50
    draw_gap()
    turtle.right(90)# 转向90
# 画一个数码管,dight是数字参数
def draw_dight(dight):
    draw_line(True) if dight in [2, 3, 4, 5, 6, 8, 9] else draw_line(False)
    draw_line(True) if dight in [0, 1, 3, 4, 5, 6, 7, 8, 9] else draw_line(False)
    draw_line(True) if dight in [0, 2, 3, 5, 6, 8, 9] else draw_line(False)
    draw_line(True) if dight in [0, 2, 6, 8] else draw_line(False)
    turtle.left(90) # 此处画笔要直行,但是draw_line函数最后右转,故在此进行左转
    draw_line(True) if dight in [0, 4, 5, 6, 8, 9] else draw_line(False)
    draw_line(True) if dight in [0, 2, 3, 5, 7, 6, 8, 9] else draw_line(False)
    draw_line(True) if dight in [0, 1, 2, 3, 4, 7, 8, 9] else draw_line(False)
    turtle.left(180)# 准备画第二个数码管了
    turtle.up()
    turtle.fd(20)
# 获得要显示的数字
def draw_data(data):#data 为日期格式,格式为'%y - %m = %d + '

    for i in data:
        if i == '-':
            turtle.pencolor("red")
            turtle.write('年', font=("Arial", 40, "normal"))
            turtle.fd(20)
        elif i == '=':
            turtle.pencolor("green")
            turtle.write('月', font=("Arial", 40, "normal"))
            turtle.fd(20)
        elif i == '+':
            turtle.pencolor("blue")
            turtle.write('日', font=("Arial", 40, "normal"))
            turtle.fd(20)
        else:
            turtle.pencolor("purple")
            draw_dight(eval(i))
# 主函数,定义turtle的相关参数
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.pensize(5)
    turtle.pencolor("purple")
    turtle.up()
    turtle.fd(-300)
    draw_data(time.strftime('%y-%m=%d+', time.gmtime()))# 获得系统时间,格式化中不能存在空格,因为你没有定义空格该怎么办
    turtle.hideturtle()
    turtle.done()
main()


  1. 全局变量与局部变量 使用规则
  • 基本数据类型,无论是否充满,局部变量都与全局变量不同
  • 可以 通过global保留字在函数内部声明该变量是全局变量
  • 组合数字类型(列表,元祖?)如果局部变量为真实创建(不创建,只修改),则任然是全局变量。
  1. lambda函数
    <函数名> = lambda<参数>:<表达式>

f= lambda x, y : x + y
f(10,15)
25

lambda函数的返回值就是其函数名,lambda函数主要用作一些特定的函数或者方法的参数,有一定的固定使用方式,一般情况下建议使用def定义的普通函数。

  1. pyinstaller打包
    简单总结PyInstaller使用方法:
    生成单一的exe文件:pyinstaller -F test.py(最常用的一种)
    添加必要的搜索路径:pyinstaller -F -p
    添加必要的搜索路径,且带图标:pyinstaller -F -p
    只用在cmd命令栏中键入pyinstaller -F test.py,注意打包文件的地址目录就行了。打包之后能在未安装Python环境的机器上运行。
    如果希望将生成的文件的图标也改成自己喜欢的图标,则需要用在cmd命令栏中键入
    pyinstaller -i <图标文件名.ico>-F <源代码文件名.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, 800, 200, 200)
    turtle.pensize(2)
    turtle.pencolor("blue")
    turtle.up()
    turtle.goto(-300,100)
    turtle.down()
    level = 3
    koch(400,level)
    turtle.right(120)
    koch(400,level)
    turtle.right(120)
    koch(400,level)
    turtle.right(120)
    turtle.hideturtle()
    turtle.done()
main()

这一周最最重要的就是递归的思想
递归=函数 + 分支语句

  • 递归本身是一个函数,需要函数定义方式进行描述
  • 函数内部,采用分支语句对输入参数进行判断,再加以处理
  • 找到基例和链条,分别编写对应代码

def <函数名>(参数,参数):
if 基例情况:
基例的处理
else:#链条
链条的处理,找到n与n-1之间的关系,递归调用函数

  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值