温度转换源程序:
#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('输入格式错误')
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”
字符串表示问题
单引号、 双引号、 三引号都可以用来表示字符串。
单引号用于处理字符串中包含双引号情况;
双引号用于处理字符串中包含单引号情况;
三引号用于处理字符串同时包含单双、双引号情况;也可以用来注释多行代码。
当然也可以不用这样做,使用转义符\,也可以。
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 = 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,"-"))# 由于之前光标回到开头且没有换行,因此加换行符避免覆盖
time.ctime()
‘Fri Jan 26 12:11:16 2018’
另外一种获得时间(格式化)的方法是使用**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))
程序与视频中稍作修改,能够反复输入数据不用重复手动运行。
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()
f= lambda x, y : x + y
f(10,15)
25
lambda函数的返回值就是其函数名,lambda函数主要用作一些特定的函数或者方法的参数,有一定的固定使用方式,一般情况下建议使用def定义的普通函数。
科赫雪花绘制源程序
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之间的关系,递归调用函数