python与分形0016 - 【教程】字符矩阵

今天写一个简单点的教程,画一个字符矩阵,成品图如下:

想要打印这样一个字符矩阵,需要具备如下一些基本知识:

  1. turtle如何画字符?
  2. turtle的画布上如何排版?

如何画字符?

turtle提供了一个函数,write,可以画文本,具体参数可以参考手册:

turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal"))

Write text - the string representation of arg - at the current turtle position according to align (“left”, “center” or “right”) and with the given font. If move is true, the pen is moved to the bottom-right corner of the text. By default, move is False.

字符的Unicode码可以在这个网站上查到:

https://unicode-table.com/

比如,“安”字的unicode码是5B89。

在python中,可以通过ord函数得到一个字符串的unicode码:

>>> x=u'安'
>>> x
'安'
>>> hex(ord(x))
'0x5b89'

通过write函数写一个“安”字,楷体,300p:

turtle.write(u'安', align="center", font=("simkai", 300, "normal"))

画布上如何排版?

又得用点数学知识了。

假设我们画COUNT*COUNT的矩阵,每个字符间距为DIST,为了保证矩阵居中绘制,起始位置必须在左上角位置:

STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2

当遍历整个COUNT*COUNT时,我们可以通过求商和取余得到行列值,确定每个字符的位置。

这样就可以很简单的推导出源码了:

# coding: utf-8

import turtle
import math
import time

turtle.setup(width=1.0, height=1.0, startx=None, starty=None)
#turtle.tracer(0)
turtle.ht()

turtle.up()
COUNT=19
DIST=30
FONTSIZE=16
STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2

time.sleep(6)

turtle.goto(STARTX, STARTY)
for c in range(COUNT*COUNT):
    x = c%COUNT
    y = c//COUNT
    turtle.goto(STARTX+DIST*x, STARTY-DIST*y)
    turtle.write(chr(0x2600+c), align="center", font=("Arial", FONTSIZE, "normal"))
余额不足的程序员
字符矩阵 #分形 #解压 #python
视频号

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容