目录

实例十一  绘制七段数码管

实例十二 科赫曲线绘制雪花

实例十三 分词统计--英文单词

实例十四 分词统计--中文词频

实例十五 将图像转换成为字符图


 

 

实例十一  绘制七段数码管

 

代码

#demo11.py

#绘制七段数码管并显示时间(本地)
#I:数字形式的字符串(日期)
#P:根据数字绘制数码管
#O:绘制当前日期形式的七段数码管

import turtle, datetime

def DrawGap():
    #数码管间间隔绘制
    turtle.penup()
    turtle.fd(5)

def DrawLine(draw):
    #绘制单段数码管
    DrawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    DrawGap()
    turtle.right(90)

def DrawDight(digit):
    #根据数字绘制七段数码管
    #先绘制下半段
    DrawLine(True) if digit in [2,3,4,5,6,8,9] else DrawLine(False)
    DrawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else DrawLine(False)
    DrawLine(True) if digit in [0,2,3,5,6,8,9] else DrawLine(False)
    DrawLine(True) if digit in [0,2,6,8] else DrawLine(False)
    #再绘制上半段
    turtle.left(90)
    DrawLine(True) if digit in [0,4,5,6,8,9] else DrawLine(False)
    DrawLine(True) if digit in [0,2,3,5,6,7,8,9] else DrawLine(False)
    DrawLine(True) if digit in [0,1,2,3,4,7,8,9] else DrawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20) 

def DrawDate(date):
    #获得需要输出的数字
    turtle.pencolor("red")
    for i in date:
        if i == '-':    # '-'替换 '年'
            turtle.write('年', font=("Arial", 18, "normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=': # '=' 替换 '月'
            turtle.write('月', font=("Arial", 18, "normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        elif i == '+':  # '+'替换 '日'
            turtle.write('日', font=("Arial", 18, "normal"))
        else:
            DrawDight( eval(i) )    #eval传递值,而不是字符串

def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)

    #DrawDate('123456')
    DrawDate( datetime.datetime.now().strftime('%Y-%m=%d+') )#绘制时间段,定义格式
    turtle.hideturtle()

main()
    

 

展示

 

 

实例十二 科赫曲线绘制雪花

 

代码

#demo12.py

#科赫曲线绘制雪花
#思路:使用递归实现绘制曲线,利用曲线生成雪花图形

from turtle import *

def koch(size, n):
    #绘制科赫曲线
    if n == 0:
        fd(size)
    else:
        for angle in [0, 60, -120, 60 ]:
            left(angle)
            koch(size/3, n-1)   #递归公式

def main():
    setup(600,600)
    speed(0)
    penup()
    goto(-200,100)
    pendown()
    pensize(2)

    level = 5
    koch(400,level) #初始曲线长度,阶数
    
    right(120)
    koch(400,level)

    right(120)
    koch(400,level)
    
    hideturtle()

main()

展示

 

 

实例十三 分词统计--英文单词

 

代码

#分词统计--英文单词

#将指定文件中的特殊字符替换成为空格
#返回一个标准的文件对象
def getText():
    txt = open("hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch," ") 
    return txt


hamletTxt = getText()
words = hamletTxt.split()   #分词

counts = {}      #
for word in words: #统计词频,存入词典counts
    counts[word] = counts.get(word,0) + 1 

items = list(counts.items())  #转换成列表
items.sort(key=lambda x:x[1], reverse=True)  #按key值(词频)高低进行排序

for i in range(10):     #输出前十个高频单词
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

展示

 

 

实例十四 分词统计--中文词频

 

代码

#分词统计--中文词频
#中文字符编码 utf-8
#依赖第三方库jieba

import jieba
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:      #排除单个字符的统计结果
        continue
    else:
        counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(15):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

 

 

实例十五 将图像转换成为字符图

 

代码

#demo15.py

#将图像转换成为字符图
#输入:位图图片
#处理:分析图片流,将像素点的RGB编码转换灰度值,再转换成对应的字符代表
#输出:pic_char.txt文件,代表字符画
from PIL import Image

#不同字符代表不同像素的色彩深度
ascii_char = list('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-/+@<>i!;:,\^`.')
def get_char(r, b, g, alpha=256):
    if alpha == 0:
        return ' '
    gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)  #将RGB值转换成灰度值
    unit = 256 / len(ascii_char)
    return ascii_char[int(gray//unit)]  #对应ascii_char中不同的字符

def main():
    im = Image.open('astro.jpg')    #
    WIDTH, HEIGHT = 100, 60
    im = im.resize((WIDTH, HEIGHT))
    txt = ""
    for i in range(HEIGHT):
        for j in range(WIDTH):
            txt += get_char(*im.getpixel((j, i)))
        txt += '\n'
    fo = open("pic_char.txt","w")
    fo.write(txt)
    fo.close()

main()

 

展示

-->   转换后    -->