震驚, 我居然用Python幹這種事ꈍ .̮ ꈍ

来源:https://www.cnblogs.com/Mifen2952277346/archive/2019/04/15/10713943.html
-Advertisement-
Play Games

閱讀本文只需花費你兩分鐘, 兩分鐘你買不了吃虧,你也買不了上當. 那麼, 為何不靜下心來看看呢? Python 海龜創意繪畫, Turtle庫創作精美圖畫 Author:Amd794 E-mail:[email protected] 全部完整代碼下載地址 前言: 最初來自於 Wally Feurzi ...


閱讀本文只需花費你兩分鐘, 兩分鐘你買不了吃虧,你也買不了上當. 那麼, 為何不靜下心來看看呢?

 


Python 海龜創意繪畫, Turtle庫創作精美圖畫 

Author:Amd794     E-mail:[email protected]    全部完整代碼下載地址 

 


 

 

前言

  • 最初來自於 Wally Feurzig 和 Seymour Papert 於 1966 年所創造的 Logo 編程語言
  • 可以通過相關的指令, 輕鬆地繪製出精美的形狀和圖案
  • 可以培養學習電腦的興趣, 以一種娛樂的方式瞭解電腦的趣味

 

turtle 教程:

 

正文:

  1. 先來個簡單的例子, 我們來用Turtle來寫一段詩詞, 用過的人都知道, Turtle實現寫字是十分簡單的, 那麼, 如何才能把朴素的文字, 變得更吸引人呢? 先來看下我想的. 效果圖如下:

演示效果

gif圖像, 可能打了一點, 無法上傳, 但這並不影響. 那麼它是怎麼繪製的呢? 莫慌, 我們來看下代碼 , 如下:

 1 from turtle import *
 2 import random
 3 
 4 str_ = """
 5 守一段情 念一個人。
 6 時光不老 我們不散。
 7 廝守終生 不離不棄。
 8 天暗下來 你就是光。
 9 亡魂溺海 止於終老。
10 生死挈闊 與子成說。
11 柔情似水 佳期如夢。
12 我中有你 你中有我。
13 青山不老 為雪白頭。
14 心若向陽 無畏悲傷。
15 一人一心 白首不離。
16 心如荒島 囚我終老。
17 我的世界 只有你懂。
18 你若安好 便是晴天。
19 心有靈犀 一點就通。
20 廝守海角 非你不娶。
21 執子的手 漫漫的走。
22 執子之手 與子偕老。
23 山河拱手 為君一笑。
24 紅塵初妝 山河無疆。
25 千秋功名 一世葬你。
26 既不回頭 何必不忘。
27 既然無緣 何須誓言。
28 今日種種 似水無痕。
29 明夕何夕 君已陌路。
30 才會相思 便害相思。
31 人來人往 繁華似錦。
32 迴首萬年 情衷伊人。
33 生能盡歡 死亦無憾。
34 執手若無 淚濺花上。
35 花開花落 人世無常。
36 入我心者 待以君王。
37 為醉而醉 似醉非醉。
38 傷心鴻影 愛已惘然。
39 只要你要 只要我有。
40 日久生情 日久情疏。
41 憂佳相隨 風雨無悔。
42 有生之年 誓死嬌寵
43 引喻山河 指日可誠。
44 水上鴛鴦 雲中翡翠。
45 天荒地老 海誓山盟。
46 生則同襟 死則同穴。
47 生有此女 夫復何求""".split("")
48 setup(1280,720)  # 設置視窗大小
49 colormode(255)  # 使用的顏色模式, 整數還是小數
50 up()
51 a, b = -500, 280
52 goto(a,b)
53 bgcolor("black")
54 
55 
56 down()
57 def w(str_,b):
58     bgcolor( random.randint(0,255),random.randint(0,255),random.randint(0,255))  # 隨機生成RGB值, 每次調用函數改變背景顏色
59     for i in range(len(str_)):
60         up()
61         goto(a+100*i,b)
62         down()
63         size =  random.randint(12,68)  # 隨機字體大小
64         color( random.randint(0,255),random.randint(0,255),random.randint(0,255))  # 隨機字體顏色
65         write(str_[i], align="center",font=("楷體",size))
66 
67         
68 for k in range(4):
69     for i in range(7):
70         w(str_[i+7*k],b-100*i)
71     reset()  # 清屏
72 
73     
74 for i in range(7):
75     w(str_[i+7*4],b-100*i)
簡單文字

 

2. 這很一般啊, 也沒什麼好看的, 變來變去的,看到我眼睛都花了乛c乛, 也對, 起初我是想背景是動態星空的背景的, 文字通過下拉滑動的方式顯示, 這樣會比較友好, 但是我沒找到合適的, 哈哈哈. 話題跑偏了,抱歉, 那麼, 你能不能拿點***的來呢, 這都吹的吧.好吧, 那麼, 看下下麵的效果, 如下圖:

月亮代表我的心

由於篇幅有限, 顯示部分, 完整代碼在標題 ,代碼如何下:

# 文字個性化
def writez(x, y, str_, size=56, font="華文行楷"):
    gotopos(x, y)
    write(str_, font=(font, size))


color("#7d776d")
s = "願天化作比翼鳥"
s2 = "在地願為連理枝"
for i in range(len(s)):
    writez(560,350-i*50,s[i],36)
for i in range(len(s2)):
    writez(460,350-i*50,s2[i],36)
color("#888475")
writez(-50, 100, "我")
writez(-50, 40, "的")
writez(-160, 0, "心", 96)
writez(-50, 0, "月", 176)
writez(33, -30, "代", 62)
writez(-18, -95, "表", 78)
writez(-213, -210, "亮", 196)

  

3. 怎麼樣, 還行吧. 哼, 這也沒什麼難度的, 我也行啊, 好吧, 我們來乾點高級一點的, 我們基於Lsystem來,用turtle優雅的畫一顆樹

  • 一個L-系統Lindenmayer系統是並行重寫系統和類型的形式文法。L系統由可用於製作字元串的符號字母表,用於將每個符號擴展為更大的符號串的生產規則集合,用於開始構建的初始“ 公理 ”字元串以及用於製作字元串的機制組成。將生成的字元串轉換為幾何結構。

  • 更多請看 https://github.com/Amd794/Python123/blob/master/README.md
  • 變數  : 'FX'

    常數  :+ - [] a b c

    開始 :'FX'

    規則 :    'F': 'aFF-[b-F+F]+[c+F-F]',
                     'X': 'aFF+[b+F]+[c-F]'

    角度 :25°

  • 好啦, 初始階段已經介紹完畢, 那麼我們開始寫代碼:

1. 先初始化一下變數:

setup(1280,720)  # 設置視窗的大小
t.speed(0)  # 改變海龜的繪製速度
t.pensize(1) # 可以通過海龜的大小, 來凸顯樹幹與樹枝的粗細差別
length = 5 # 每一次繪製的長度
path = 'FX' # 初始的規則
angle = 25  # 每次變換的角度

expalnation = {
    'F': '畫線',
    'x': '-',
    '+': '逆時針旋轉',
    '-': '順時針旋轉',
    '[': '記錄當前位置',
    ']': '恢覆上一個位置',
    'a': '上色',
    'b': '上色',
    'c': '上色'
}

# 替換的規則
rules = {
    'F': 'aFF-[b-F+F]+[c+F-F]',
    'X': 'aFF+[b+F]+[c-F]'
}

  

2. 下麵開始應用規則:

def apply_rules(path, rules):
    L = [_ for _ in path]
    for i in range(len(L)):
        symbol = L[i]
        if symbol == 'F':
            L[i] = rules[symbol]
        if symbol == 'X':
            L[i] = rules[symbol]
    path = ''.join(L)
    return path


for _ in range(5):
    path = apply_rules(path, rules)

  

3. 最後, 開始畫圖:

# 這裡通過映射的方式更佳, 我起初寫前面的例子的時候規則不是很多, 就沒怎麼留意.
def draw_path(path, expalnation):
    posList, angleList = [], []
    t.up()
    t.goto(0, -350)
    t.down()
    t.lt(90)
    for symbol in path:
        if symbol == 'F':
            t.forward(length)
        elif symbol == '+':
            t.left(angle)
        elif symbol == '-':
            t.rt(angle)
        elif symbol == '[':
            posList.append(t.pos())
            angleList.append(t.heading())
        elif symbol == 'a':
            t.pensize(3)
            t.color("#8c503c")
        elif symbol == 'b':
            t.pensize(2)
            t.color("#4ab441")
        elif symbol == 'c':
            t.pensize(2)
            t.color("#18b418")
        elif symbol == ']':
            t.up()
            t.home()
            t.goto(posList.pop())
            t.left(angleList.pop())
            t.down()

  

 

好, 所有都已準備好了, 我們來看下效果:

tree

哎呀, 好像忘記了改變畫筆大小了, 沒關係,這些後期處理一下就好.那麼本文到此結束.


總結:

1

2

3

4

5


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引子 最近遇到很多朋友過來咨詢G1調優的問題,我自己去年有專門學過一次G1,但是當時只是看了個皮毛,因此自己也有不少問題。總體來講,對於G1我有幾個疑惑,希望能夠在這篇文章中得到解決。 1. G1出現的初衷是什麼? 2. G1適合在什麼場景下使用? 3. G1的trade off是什麼? 4. G1 ...
  • python3字元串操作 ...
  • 今天繼續學習一下Numpy庫,廢話不多說,整起走 先說下Numpy中,經常會犯錯的地方,就是數據的複製 這個問題不僅僅是在numpy中有,其他地方也同樣會出現 先看看這段代碼,我們隨便建立了一個numpy數組 然後我想把a這個值,賦值給b,很簡單的操作,b = a 那麼我們列印一下b和a是不相等,返 ...
  • 第一周-第06章節-Python3.5-第一個python程式 G:\Python3.7.3\python.exe G:/practise/oldboy/day1/HelloWorld.pyHelloWorld!!! Process finished with exit code 0 第一周-第07 ...
  • Java8是自java5之後最重大的一次更新,它給JAVA語言帶來了很多新的特性(包括編譯器、類庫、工具類、JVM等),其中最重要的升級是它給我們帶來了Lambda表達式和Stream API。 1、什麼是Lambda表達式? Lambda是一個匿名函數,可以理解為是一段可以傳遞的代碼,可以將代碼像 ...
  • 隊列:先入先出(FIFO)表。 常用操作: Enqueue:入隊,即將數據寫入隊列末尾 Dequeue:出隊,即將隊列開頭的元素從隊列中刪除並返回 應用場景: 隊列通常用來實現消息(任務)的快速讀寫,即消息隊列。消息隊列的常用來解決如下問題: 提升系統的吞吐量:通過引入消息隊列,將不是必須的業務邏輯 ...
  • 當伺服器是Linux的時候不懂指令覺得很懊惱,這個時候直接就可以使用PHPstorm連接伺服器操作了; 1丶準備工作 首先你先要準備伺服器丶phpstorm這兩個吧! 2丶開始配置phpstorm 按照紅線的部分一步一步的走 點擊configuration 點擊+號 我直接選擇的sftp 就這樣連接 ...
  • 1. 三種控制結構是什麼? 答:順序結構,選擇結構,迴圈結構 2. 如果if語句後不加{},if的控制範圍是否只限於第一句? 答:if語句的控制範圍只能是緊接著的一句,使用{}可以將多個語句合併成為一個複合語句,進而控制多個語句。 3. Math.random()是什麼意思?如果想要獲取15到20之 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...