Python语言程序设计之二--用turtle库画围棋棋盘和正、余弦函数图形
这篇笔记依然是在做《Python语言程序设计》第5章循环的习题。其中有两类问题需要记录下来。
第一是如何画围棋棋盘。围棋棋盘共有19纵19横。其中,位于(0,0)的星位叫天元,其余8个星位坐标分别是:(-6,6),(0,6),(6,6),(-6,0),(6,0),(-6,-6),(0,-6),(6,-6)。这里面涉及到绘制等间距网格,我选择for循环来实现。考虑到以后可以修改棋盘大小,所以网格间距和初始点位置都设置成全局变量。其代码如下:
# 绘制围棋棋盘 import turtle # 线与线间隔
n = 30
# 初始点位置
x = -300
y = -300 # 定义棋盘样式
turtle.speed(3)
turtle.pencolor('black')
turtle.screensize(400, 400) # 画横线
for i in range(19):
turtle.penup()
turtle.goto(x, y + n * i)
turtle.pendown()
turtle.forward(n * 18) # 画竖线
turtle.left(90)
for i in range(19):
turtle.penup()
turtle.goto(x + n * i, y)
turtle.pendown()
turtle.forward(n * 18) turtle.right(90) # 画9个星位,每排三个,共三排所以是两层for循环
x_first = x + n * 3
y_first = y + n * 3 - n * 0.25 for i in range(3):
for j in range(3):
turtle.penup()
turtle.goto(x_first + 6 * j * n, y_first + 6 * i * n)
# 如果按下面写法,则先画左边3个星,再画中间3个
# turtle.goto(x_first + 6 * j * n, y_first + 6 * i * n)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor('blue')
# 飞星的半径为1/4个网格间距
turtle.circle(n * 0.25)
turtle.end_fill() # 隐藏画笔箭头
turtle.hideturtle() turtle.done()
代码运行结果如下图:

题目非常简单,重点是通过画图来感受循环在处理重复性动作时的威力。但凡重复性的工作都可以用循环来处理。这也正是计算机擅长的工作,并且也是程序的意义所在:把人的精力从繁琐的、海量的、重复性的、简单的初级工作中解脱出来。
第二个问题就是绘制正弦、余弦函数。其核心思想是:放下画笔,然后让画笔依次通过各个坐标点就画出一条正弦余弦曲线。从这里也可以看出,这也是不断地重复性工作,重复地计算以x为横坐标的点的 y 坐标,然后重复地让画笔通过这些点。所以我也选用for循环。
当然,代码中值得关注的就是 x-0-y 坐标系的绘制。这段代码可以通用。
# 在正交坐标系下画sin(x)和cos(x)曲线 import turtle
import math turtle.speed(1) # 画 x 轴
turtle.penup()
turtle.goto(-220, 0)
turtle.pendown()
turtle.goto(220, 0) # 画 x 轴箭头
turtle.setheading(150)
turtle.forward(20)
turtle.penup()
turtle.goto(220, 0)
turtle.setheading(-150)
turtle.pendown()
turtle.forward(20) # 显示x
turtle.penup()
turtle.goto(225, 0)
turtle.write('X') # 画 y 轴
turtle.penup()
turtle.goto(0, -100)
turtle.pendown()
turtle.goto(0, 100) # 画 y 轴箭头
turtle.setheading(240)
turtle.forward(20)
turtle.penup()
turtle.goto(0, 100)
turtle.pendown()
turtle.setheading(-60)
turtle.forward(20) # 显示Y
turtle.penup()
turtle.goto(0, 110)
turtle.write('Y') # 画正弦曲线
x = -175
turtle.pensize(2)
turtle.color('blue')
turtle.penup()
turtle.goto(x, 50 * math.sin((x / 100) * 2 * math.pi))
turtle.pendown()
for x in range(-175, 176):
turtle.goto(x, 50 * math.sin((x / 100) * 2 * math.pi)) # 将-2π的位置标示出来
turtle.penup()
turtle.goto(-100, -20)
turtle.write('-2π') # 将2π的位置标示出来
turtle.penup()
turtle.goto(100, -20)
turtle.write('2π') # 画余弦曲线
x = -175
turtle.pensize(2)
turtle.color('red')
turtle.penup()
turtle.goto(x, 50 * math.cos((x / 100) * 2 * math.pi))
turtle.pendown()
for x in range(-175, 176):
turtle.goto(x, 50 * math.cos((x / 100) * 2 * math.pi)) turtle.hideturtle()
turtle.done()
运行结果如下:

最后我还是要重复一遍上面的心得:但凡重复性的工作都可以用循环来处理。这也正是计算机擅长的工作,并且也是程序的意义所在:把人的精力从繁琐的、海量的、重复性的、简单的初级工作中解脱出来。应该把精力放在建模和算法优化上。这才是重点和难点。
这句话重复了,可以for一下。哈哈,皮
Python语言程序设计之二--用turtle库画围棋棋盘和正、余弦函数图形的更多相关文章
- 使用turtle库画国际象棋棋盘
import turtle n = 60 # 每行间隔,小格子边长 x = -300 # x初始值 y = -300 # x初始值 def main(): turtle.speed(11) turtl ...
- 全国计算机等级考试二级Python语言程序设计考试大纲
全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...
- 【学习笔记】PYTHON语言程序设计(北理工 嵩天)
1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则 摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...
- Python语言程序设计之三--列表List常见操作和错误总结
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...
- 【任务】Python语言程序设计.MOOC学习
[博客导航] [Python导航] 任务 18年11月29日开始,通过9周时间跨度,投入约50小时时间,在19年1月25日之前,完成中国大学MOOC平台上的<Python语言程序设计>课程 ...
- Python语言程序设计之一--for循环中累加变量是否要清零
最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...
- Python语言程序设计(1)--实例1和基本知识点
记录慕课大学课程<Python语言程序设计>的学习历程. 实例1:温度转换 #温度转换TempStr = input("请输入带有符号的温度值:") #TempStr是 ...
- 用Turtle库画一个爱心
---恢复内容开始--- 用Python中的turtle库画一个爱心 这个学期,我学了Python语言,并学到其中的一个库:turtle库.用turtle库可以画一些你想画的图片,所以我就想画一个爱心 ...
- Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库
1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...
随机推荐
- Jquery树形控件 $.fn.zTree.init
https://www.cnblogs.com/jin-/p/4646202.html asp.net 树形控件 $.fn.zTree.init 在网页中通过jquery脚本来构筑树形控件将是一个不错 ...
- 服务是如何加载并运行的, Kestrel、配置与环境
服务是如何加载并运行的, Kestrel.配置与环境 "跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观 ...
- laravel-mix 热重载404的问题
在项目中,使用npm run hot时,无法加载 http://localhost:8080/js/app.js 以及 http://localhost:8080/css/app.css 版本 Lar ...
- mysqldatadir 转移
当mysql data路径与原始目录不一致时 ,请在mysql 安装目录下my-default.ini 进行设置,取消对应#注释的地址,设置新地址,保存,重新启动,即可. 从网上各种搜索啊,各种尝试, ...
- Beginning Python Chapter 3 Notes
变量(variable)是储存数据的实体,在Python中也被称为"名称"(name). 1.Python"名称"基本命名法则 1.1) "名称&qu ...
- SharePoint Server 2016 WEB 网站浏览器支持
SharePoint Server 2016支持多种常用的Web浏览器,如Internet Explorer,Google Chrome,Mozilla Firefox,Apple Safari和Mi ...
- 用指针的方式实现,重写strrchr函数的功能
char *strchrTest(char * ptr,char c); Action(){ char str[]={"thisisadog"}; char c='s'; lr_o ...
- Red Hat Enterprise Linux(RHEL)中yum的repo文件详解
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...
- Android(java)学习笔记124:利用Service在后台播放背景音乐
1. 在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过 ...
- Beta版本发布
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/?page=2 这个作业要求在哪里 <作业要求的 ...