这篇笔记依然是在做《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库画围棋棋盘和正、余弦函数图形的更多相关文章

  1. 使用turtle库画国际象棋棋盘

    import turtle n = 60 # 每行间隔,小格子边长 x = -300 # x初始值 y = -300 # x初始值 def main(): turtle.speed(11) turtl ...

  2. 全国计算机等级考试二级Python语言程序设计考试大纲

    全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...

  3. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...

  4. Python语言程序设计之三--列表List常见操作和错误总结

    最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...

  5. 【任务】Python语言程序设计.MOOC学习

    [博客导航] [Python导航] 任务 18年11月29日开始,通过9周时间跨度,投入约50小时时间,在19年1月25日之前,完成中国大学MOOC平台上的<Python语言程序设计>课程 ...

  6. Python语言程序设计之一--for循环中累加变量是否要清零

    最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...

  7. Python语言程序设计(1)--实例1和基本知识点

    记录慕课大学课程<Python语言程序设计>的学习历程. 实例1:温度转换 #温度转换TempStr = input("请输入带有符号的温度值:") #TempStr是 ...

  8. 用Turtle库画一个爱心

    ---恢复内容开始--- 用Python中的turtle库画一个爱心 这个学期,我学了Python语言,并学到其中的一个库:turtle库.用turtle库可以画一些你想画的图片,所以我就想画一个爱心 ...

  9. Python语言程序设计(3)--实例2-python蟒蛇绘制-turtle库

    1. 2. 3.了解turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良 ...

随机推荐

  1. 练习三十二:用python实现:按相反的顺序输出列表的每一位值

    用python实现:按相反的顺序输出列表的每一位值 1. 使用list[::-1] list1 = ["one","two","three" ...

  2. net core (下)

    net core (下) 第一部分: https://www.cnblogs.com/cgzl/p/8450179.html 本文是基于Windows10的. Debugging javascript ...

  3. 远程调试工具weinre使用教程

    一:前言 我们都知道,chrome的开发者工具(f12)是一个方便我们调试PC页面的工具.但是现在我们的开发离不开移动端,那如果我们需要对手机页面进行调试,那该怎么办了? 当然,chrome的开发者工 ...

  4. 【转】LINQ to SQL语句(1)之Where

    Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形 ...

  5. oracle v$database 视图

    Select db.dbid "数据库标识",--数据库的标识,当数据库在所有文件的头部创建和存储时计算出来的标记编号       db.Name "数据库名称" ...

  6. css常用操作

    对齐操作 1.使用margin属性进行水平对齐     margin-left:auto;    margin-right:auto; 2.使用position属性进行左右对齐      3.使用fl ...

  7. QrenCode : linux命令行下生成二维码图片

    原文链接:http://wowubuntu.com/qrencode.html # 作者:riku/ / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接. 对于二维码大家应该并不陌 ...

  8. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  9. 如何在Android Studio中导入JNI生成的.so库

    由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(0.86版 ...

  10. cmd_ping命令

    ping命令是网络命令里的核心命令,同时也是黑客入侵的基础命令.下面和大家分享一下ping命令的基础知识和一般用法. 以ping百度公司域名为例,介绍ping命令相关内容. 一.ping命令基础知识 ...