中国大学MOOCPython语言程序设计基础学习笔记和课后练习1-4周(南京邮电大学)
- Python语言程序设计基础
- 第2周 第1个python程序
- 第三周 对第一个程序的补充
- 第三单元作业
- 1.提示用户从键盘上输入一个4位的正整数(假设个位不为0),在屏幕上输出该数的反序数。反序数即原数各位上的数字颠倒次序所形成的另一个整数。例如,1234的反序数是4321;2468的反序数是8642。
- 2.提示用户从键盘上输入一个代表分钟的整数(如10000000),输出这个分钟数代表了多少年零多少天零多少小时零多少分钟。为了简化问题,假设一年有365天。
- 3.提示用户从键盘上输入一个有效的年份,在屏幕上打印这个年份是否为闰年,要求使用条件运算符完成程序中的功能。条件运算符的语法为:表达式1 if 表达式2 else 表达式3,其中若表达式2的值为True,则整个算式的值为表达式1的值,否则,整个算式的值为表达式3的值。
- 第四周 神奇的小海龟
- 实验周 使用Turtle函数库绘图
补充实验周 使用Turtle函数库绘图
Python语言程序设计基础
第2周 第1个python程序
第二单元作业
1.提示用户从键盘上输入两个整数(假设都不为0),在屏幕上打印这两个整数的和、差、积、商、余数。
try:
t=input("请输入两个不为0的整数,空格分隔:").split()
a,b=int(t[0]),int(t[1])
s,d,p,q,r=a+b,a-b,a*b,a/b,a%b
print("输出它们之和{},差{},积{},商{:.2f},余数{}".format(s,d,p,q,r))
except ValueError:
print("输入错误,请重新输入")
t = input("请输入两个不为0的整数,空格分隔:").split()
2.提示用户从键盘上输入一个摄氏温度,在屏幕上输出该摄氏温度对应的华氏温度。
try:
C=eval(input("请输入一个摄氏温度:"))
F=1.8*(C+32)
print("输出的华氏温度是{:.2f}F".format(F))
except ValueError:
print("输入错误,请重新输入")
C = eval(input("请输入一个摄氏温度:"))
3.提示用户从键盘上输入一个9位的整数,将其分解为3个3位的整数并输出,其中个、十、百位为一个数,千、万、十万位为一个数,百万、千万、亿位为一个数。例如:当输入123456789,它可以被分解为123、456和789。
#方法一:
try:
t=input("请输入一个9位的整数:")
a,b,c=t[:3],t[3:6],t[-3:]
print(a,b,c)
except ValueError:
print("输入错误,请重新输入")
t = input("请输入一个9位的整数:")
#方法二:
t=int(input("请输入一个9位的整数:"))
a=t//1000000
b=t//1000%1000
c=t%1000
print("{}可以被拆分成{:03},{:03},{:03}".format(t,a,b,c))
第三周 对第一个程序的补充
调试纠错的重要性,很多时候,我们往往会忽略,导致做了很长时间也出不来结果,费时费力。所以必须学会纠错才能进步!
第三单元作业
1.提示用户从键盘上输入一个4位的正整数(假设个位不为0),在屏幕上输出该数的反序数。反序数即原数各位上的数字颠倒次序所形成的另一个整数。例如,1234的反序数是4321;2468的反序数是8642。
# 1.提示用户从键盘上输入一个4位的正整数(假设个位不为0),在屏幕上输出该数的反序数。
# 反序数即原数各位上的数字颠倒次序所形成的另一个整数。例如,1234的反序数是4321;2468的反序数是8642。
#方法一:
t=int(input("请输入一个4位正整数:"))
#分别得到它的千位、百位、十位、个位
a1=t//1000
a2=t//100%10
a3=t//10%10
a4=t%10
#进行反序
T=a1+a2*10+a3*100+a4*1000
print("{}的反序数为:{}".format(t,T))
#方法二:
try:
t=int(input("请输入一个4位正整数:"))
print("输出这四位正整数的反序数:"+str(t)[::-1])
except ValueError:
print("输入错误,请重新输入:")
2.提示用户从键盘上输入一个代表分钟的整数(如10000000),输出这个分钟数代表了多少年零多少天零多少小时零多少分钟。为了简化问题,假设一年有365天。
# 输出这个分钟数代表了多少年零多少天零多少小时零多少分钟。为了简化问题,假设一年有365天。
try:
num=int(input("请输入一个代表分钟的整数:"))
y=num//(60*24*365)
d=num//(60*24)%365
h=num//60%24
m=num%60
print("这个分钟代表{}年{}天{}小时{}分钟".format(y,d,h,m))
except ValueError:
print("输入格式错误,请重新输入:")
3.提示用户从键盘上输入一个有效的年份,在屏幕上打印这个年份是否为闰年,要求使用条件运算符完成程序中的功能。条件运算符的语法为:表达式1 if 表达式2 else 表达式3,其中若表达式2的值为True,则整个算式的值为表达式1的值,否则,整个算式的值为表达式3的值。
try:
y = int(input("请输入一个年份:"))
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
print("是闰年")
else:
print("不是闰年")
except ValueError:
print("输入格式错误,请重新输入:")
第四周 神奇的小海龟
部分代码练习:
# 请进小海龟,并设置小海龟的外形和颜色
import turtle
turtle.shape("turtle")
turtle.color("red")
def drawstar(x, y, color):
turtle.up()
turtle.goto(x, y)
turtle.down()
turtle.color(color)
for i in [0, 1, 2, 3, 4]:
turtle.right(144)
turtle.forward(100)
# 设置小海龟的位置和朝向
# 绘制第一个五角星
drawstar(-200, 200, "blue")
# 再一次设置小海龟的位置和朝向
# 绘制第二个五角星
drawstar(300, 200, "green")
# 继续设置小海龟的位置和朝向,并绘制第三、第四个五角星
drawstar(-200, -200, "red")
drawstar(300, -200, "yellow")
turtle.up()
turtle.home()
第四单元作业
1.提示用户从键盘上输入一个正整数n,使用小海龟在屏幕上输出一个任意大小和任意颜色填充的正n边形。
import turtle,random
#任意形状图形的半径在50-100区间随机取得
r=random.randint(50,100)
n=int(input("请输入一个正整数:"))
turtle.speed(1)
turtle.color("black","red")
turtle.begin_fill()
for i in range(n):
#使用内角公式
turtle.right(180-(n-2)/n*180)
turtle.fd(r)
turtle.end_fill()
turtle.done()
2.在程序中编写一个add()函数,参数为两个数值,返回这两个参数的和。然后在程序中提示用户输入两个数,通过调用自己编写的add()函数完成求和的运算,最后打印出函数运行的结果。
#2.在程序中编写一个add()函数,参数为两个数值,返回这两个参数的和。
# 然后在程序中提示用户输入两个数,通过调用自己编写的add()函数完成求和的运算,最后打印出函数运行的结果。
def add(a,b):
return a+b
x,y=eval(input("请输入两个数,以逗号分割:"))
sum=add(x,y)
print("输出这两个数的和为:",sum)
3.使用小海龟,在屏幕上绘制一系列的同心圆,并未这些同心圆填充上不同的颜色。
注意点:
绘制颜色时候防止被覆盖应从大到小绘制。fillcolor可以使用random函数随机生成。不足:随机生成颜色有可能会相同,但是不影响学习绘图技能。
#33.使用小海龟,在屏幕上绘制一系列的同心圆,并未这些同心圆填充上不同的颜色。
import turtle,random
n=eval(input("请输入绘制的同心圆的个数:"))
#为了简化,假设最大圆半径是100,输入最大数为5,则刚好减为零
r=100
turtle.pensize(2)
turtle.speed(1)
turtle.pencolor("black")
fillcolor=["blue","red","pink","green","yellow"]
#也可以直接使用随机值生成颜色
#在下一个方法中使用
for i in range(n):
turtle.fillcolor(random.choice(fillcolor))
turtle.penup()
turtle.begin_fill()
turtle.goto(0,-r+i*20)
turtle.pendown()
turtle.circle(r-i*20)#假设每次递减20
turtle.end_fill()
turtle.done()
还可以使用函数
import turtle,random
n=eval(input("请输入绘制的同心圆的个数:"))
#为了简化,假设最大圆半径是100,输入最大数为5,则刚好减为零
turtle.pensize(2)
turtle.speed(1)
turtle.pencolor("black")
#使用随机值生成颜色
turtle.colormode(255)
def drawcircle(r,fillcolor):
turtle.penup()
turtle.begin_fill()
turtle.goto(0,-r)
turtle.fillcolor(fillcolor)
turtle.pendown()
turtle.circle(r)
turtle.end_fill()
for i in range(n):
fillcolor=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
drawcircle(100-20*i,fillcolor)
turtle.done()
最终图形:
实验周 使用Turtle函数库绘图
turtle绘图作业
1.请编写Python程序完成以下要求:
在屏幕上绘制由七巧板中各种简单图形组成的自创图形,其中同一个形状可以使用多次。
(得分点提示:程序的可读性、是否有注释、绘制该图形的实现难度)
默认的七巧板如图所示:
老师的解法,代码稍长,可以使用循环来化简
import turtle
turtle.speed(1)
turtle.up()
turtle.goto(-200,200)
turtle.down()
turtle.pensize(0)
#绘制上方三角形
turtle.color("#caff67")
turtle.begin_fill()
turtle.goto(200,200)
turtle.home()
turtle.goto(-200,200)
turtle.end_fill()
#绘制左方大三角形
turtle.color("#67becf")
turtle.begin_fill()
turtle.goto(-200,-200)
turtle.home()
turtle.end_fill()
#绘制中间小三角形
turtle.color("#f9f51a")
turtle.begin_fill()
turtle.goto(100,100)
turtle.goto(100,-100)
turtle.end_fill()
#绘制右边平行四边形
turtle.color("#ef3d61")
turtle.begin_fill()
turtle.goto(100,100)
turtle.goto(200,200)
turtle.goto(200,0)
turtle.end_fill()
#绘制右下三角形
turtle.color("#f6ca29")
turtle.begin_fill()
turtle.goto(200,-200)
turtle.goto(0,-200)
turtle.end_fill()
#绘制下方正方形
turtle.color("#a594c0")
turtle.begin_fill()
turtle.goto(100,-100)
turtle.goto(0,0)
turtle.goto(-100,-100)
turtle.end_fill()
#绘制左下三角形
turtle.color("#fa8ecc")
turtle.begin_fill()
turtle.goto(0,-200)
turtle.goto(-200,-200)
turtle.end_fill()
#绘制完毕
turtle.hideturtle()
turtle.done()
刚好来学习一下直角坐标系,分别给各个定点标注坐标,绘图时候只要让海龟在这些点之间移动思路就清楚一些了。
使用函数的代码(原创):
#使用函数的目的是为了训练,其实简洁性和易读性关键在于自己对于坐标系的理解
import turtle
turtle.speed(1)
turtle.up()
turtle.goto(0,0)
turtle.down()
turtle.pensize(0)
color=["blue","red","pink","green","yellow","purple","orange"]
M=[[(200,200),(-200,200)],[(-200,-200),(0,0)],[(100,100),(100,-100)]]
N=[[(200,0),(200,-200),(0,-200)],[(-200,-200),(-100,-100),(0,-200)],
[(-100,-100),(0,0),(100,-100)],[(200,0),(200,200),(100,100)]]
#对几个三角形使用函数
def drawcircle(m1,n1,color):
turtle.color(color)
turtle.begin_fill()
turtle.goto(m1)
turtle.goto(n1)
turtle.end_fill()
for i in range(3):
drawcircle(M[i][0],M[i][1],color[i])
#对剩余的两个三角形和两个四边形使用函数
def drawcircle2(m2,n2,k,color):
turtle.color(color)
turtle.begin_fill()
turtle.goto(m2)
turtle.goto(n2)
turtle.goto(k)
turtle.end_fill()
for i in range(4):
drawcircle2(N[i][0],N[i][1],N[i][2],color[i+3])
#绘制完毕
turtle.hideturtle()
turtle.done()
最后的效果一样!但是如果绘制很多图形,函数更优。
将坐标值改变后可以很容易绘制其他图形,比如绘制一个小房子:
代码如下:
#用turtle绘制图案小房子
#注:图片颜色随机
import turtle
turtle.speed(1)
turtle.up()
turtle.goto(-70.71,141.42)
turtle.down()
turtle.pensize(0)
#颜色从这些颜色中依次选择
color=["blue","red","pink","green","yellow","purple","orange"]
#首先收集正方形、平行四边形和两个三角形各点坐标
M=[[(0,141.42),(0,70.71),(-70.71,70.71)],
[(-135.35,0),(-70.71,0),(0,70.71)],
[(29.29,100),(129.29,0),(-70.71,0)],
[(-100,0),(-100,-100),(0,0)]]
#然后是收集剩余的三个三角形各点坐标
N=[[(-100,-100),(100,-100)],[(100,0),(50,-50)],[(100,0),(0,0)]]
#绘制正方形、平行四边形和两个三角形
def drawcircle(m1,n1,k,color):
turtle.color(color)
turtle.begin_fill()
turtle.goto(m1)
turtle.goto(n1)
turtle.goto(k)
turtle.end_fill()
for i in range(4):
drawcircle(M[i][0],M[i][1],M[i][2],color[i])
#绘制剩余的三个三角形
def drawcircle2(m2,n2,color):
turtle.color(color)
turtle.begin_fill()
turtle.goto(m2)
turtle.goto(n2)
turtle.end_fill()
for i in range(3):
drawcircle2(N[i][0],N[i][1],color[i+4])
#绘制完毕
turtle.hideturtle()
turtle.done()
绘制后的效果图:
2.请编写Python程序完成以下要求:请使用小海龟绘制你想绘制的任意图形,除了让你绘制的图形尽量美观,我们还希望你能让别人尽量看得懂你的程序。
对以上图片进行修饰,增加一些弧形图形和文字。
#turtle绘制其他图案
import turtle
turtle.speed(1)
turtle.up()
turtle.goto(-70.71,141.42)
turtle.down()
turtle.pensize(0)
#颜色从这些颜色中依次选择
color=["blue","red","green","pink","yellow","purple","orange","blue"]
#首先收集正方形、平行四边形和三角形各点坐标
M=[[(0,141.42),(0,70.71),(-70.71,70.71)],
[(-135.35,0),(-70.71,0),(0,70.71)],
[(29.29,100),(129.29,0),(-70.71,0)]]
#然后是收集三个矩形各点坐标
N=[[(100,0),(100,-100),(-100,-100),(-100,0)],
[(-70.71,-10),(-21.71,-10),(-21.71,-60),(-71.71,-60)],
[(20,-15),(80,-15),(80,-100),(20,-100)]]
#绘制正方形、平行四边形和三角形
def drawcircle(m1,n1,k1,color):
turtle.color(color)
turtle.begin_fill()
turtle.goto(m1)
turtle.goto(n1)
turtle.goto(k1)
turtle.end_fill()
for i in range(3):
drawcircle(M[i][0],M[i][1],M[i][2],color[i])
#绘制三个矩形
def drawcircle2(m2,n2,k2,d,color):
turtle.color(color)
turtle.penup()
turtle.goto(m2)
turtle.begin_fill()
turtle.goto(n2)
turtle.pendown()
turtle.goto(k2)
turtle.goto(d)
turtle.end_fill()
for i in range(3):
drawcircle2(N[i][0],N[i][1],N[i][2],N[i][3],color[i+3])
#绘制小房子门的按钮
turtle.goto(40, -60)
turtle.color("red")
turtle.begin_fill()
turtle.circle(10)
turtle.end_fill()
for i in range(3):
turtle.penup()
turtle.goto(-36,165+35*i)
turtle.color("black")
turtle.begin_fill()
turtle.circle(15)
turtle.end_fill()
turtle.pendown()
turtle.penup()
turtle.goto(-220,-200)
turtle.pendown()
turtle.write("我爱我的小家",font=("隶书",50,"normal"))
#绘制完毕
turtle.hideturtle()
turtle.done()
最终效果图:
总结:
turtle库是个宝藏库,带我学习数学和编程,以后有机会多多学习,提升自我!