中国大学MOOCPython语言程序设计基础学习笔记和课后练习1-4周(南京邮电大学)

中国大学MOOCPython语言程序设计基础学习笔记和课后练习1-4周(南京邮电大学)

补充实验周 使用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库是个宝藏库,带我学习数学和编程,以后有机会多多学习,提升自我!

  • 24
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值