700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python语言程序设计(北京理工大学MOOC)1-5周

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

时间:2019-04-16 17:51:19

相关推荐

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

第一周

温度转换源程序:

#TempConvert.pyTempStr = input("请输入带有符号的温度值:")if TempStr[0] in ['C','c']:F = 1.8*eval(TempStr[1:-1])+32print('转换后的温度值为F{:.2f}'.format(F))elif TempStr[0] in ['F','f']:C = (eval(TempStr[1:-1])-32)/1.8print('转换后的温度值为C{:.2f}'.format(C))else:print('输入格式错误')

eval():去掉参数最外侧引号并执行余下语句的函数

eval(“1”)

1

eval(“1+2”)

3

eval(‘“1+2”’)

‘1+2’

eval(‘print(“hello”)’)

hello

字符串序号问题及应用

字符串存在以下两种序号标号方式。

TempStr = “0123456789”

字符串可以进行检索、切片

检索:TempStr[1]表示字符串第二个元素即1

切片:TempStr[1:-1]表示的是去除第一个元素剩下的部分。即TempStr = “123456789”

带步长的切片:TempStr[1:-1:2],以步长为2进行切片。即TempStr = “13579”

巧妙切片应用:倒序字符串元素:TempStr[::-1],结果即:TempStr = “9876543210”

字符串表示问题

单引号、 双引号、 三引号都可以用来表示字符串。

单引号用于处理字符串中包含双引号情况;

双引号用于处理字符串中包含单引号情况;

三引号用于处理字符串同时包含单双、双引号情况;也可以用来注释多行代码。

当然也可以不用这样做,使用转义符\,也可以。

字符串部分内建函数

字符串格式化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()# 将程序运行设计为需手动退出

库引用 及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()函数对应;

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 = 1for 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_valuedaydown_factor = 0.01dayup_factor = 0.01while dayup(dayup_factor) < 37.78:dayup_factor = dayup_factor + 0.001print("工作日需要努力的参数是{:.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 = '*' * ib = '-' * (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,"-"))# 由于之前光标回到开头且没有换行,因此加换行符避免覆盖

time库的使用 . 获取当前系统时间的方法

ctime()函数获取当前时间并以易读方式表示,返回字符串

time.ctime()

‘Fri Jan 26 12:11:16 ’

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

程序计时

第四周

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))

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

random库

random是使用随机数的Python标准库,主要用于生产随机数。

用法:import random

随机数的产生是由种子唯一确定的,因此只要是每次seed一样,那么产生的随机数也是一样的。因此也可以称其为伪随机数。如果不指定种子,那么种子默认是系统时间(精确到微妙),因此调用random函数时产生的随机数就不一样。

那什么时候需要指定种子?

当你的程序需要复现上次随机数据产生的结果的时候需要指定种子。

例子如下:

其他随机扩展函数

求取π值(蒙特卡洛法)源程序

import timeimport randomDraft = 2000 * 2000star = time.perf_counter()Hit = 0for 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 + 1pi = 4*(Hit/Draft)print("π值为{:.16f}".format(pi))print("程序所花费时间为{:.2f}".format(time.perf_counter()-star))

调用了time库和random库,time库可以省略。

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

第五周

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

import timeimport turtledef draw_gap():turtle.up()turtle.fd(5)# line作为参数判断这一条线是否需要画下def draw_line(line):turtle.down() if line else turtle.up()turtle.fd(50) # 前进或者画50draw_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()

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

<函数名> = lambda<参数>:<表达式>

f= lambda x, y : x + y

f(10,15)

25

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

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 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, 800, 200, 200)turtle.pensize(2)turtle.pencolor("blue")turtle.up()turtle.goto(-300,100)turtle.down()level = 3koch(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之间的关系,递归调用函数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。