python作品创意简单,python创意小作品

本文介绍了如何使用Python的turtle库,结合特定字体,如印章篆体、方正小篆体和汉仪行楷繁,创作出书法作品《鸟鸣涧》,包括印章制作、文字竖排显示和整体布局。

大家好,小编为大家解答python作品创意简单的问题。很多人还不知道python创意小作品,现在让我们一起来看看吧!

Source code download: 本文相关源码

本篇以唐王维诗作《鸟鸣涧》为例,介绍Python用turtle制作书法作品。

一、繁体字库安装

书法作品以繁体字为主,图章一般用方篆体或印章篆体,文字一般用小篆、行书、行楷、草书等python实现猴子跳台阶。本例使用“印章篆体”制作印章,使用“方正小篆体”书写书法主体文字,落款使用“汉仪行楷繁”字体。所以要运行本案例,需要预先下载并安装“印章篆体”、“方正小篆体”和“汉仪行楷繁”三种字体,当然也可以用其他字体替代,但效果会不一样。

二、印章制作

书法作品落款一般用方章,文字可用“某某某印”,外加方框。

常规画方框用四个直线+(90°)转弯绘制,本篇介绍用circle()方法绘制方框,没有错,用画圆方法绘制。画圆函数的语法结构如下:

turtle.circle(radius,extent=None, steps=None)

其中:radius为数值,表示圆的半径,如果半径为正则按逆时针方向绘制圆弧,否则按顺时针方向绘制圆弧;extent(可选)为数值,表示从当前位置开始绘制圆弧的角度,如果缺省则绘制整个圆;steps(可选)为整数,表示分多少段绘制指定角度的弧或整圆(内接多边形)

由于圆是由内接正多边形近似绘制的,因此steps决定要使用的段数。如果未给出,将自动计算。可以用来画正多边形。

常规编程为:

for i in range(4):

    tl.fd(d)

    tl.lt(90)

用circle()编程为:

turtle.circle(d*0.707,360, 4)

但用circle()绘制多边形时,当前点是其中的一个顶点,所以上述语句绘制出来的是一个菱形,需要预告右转90°,才能绘制正方形。

印章分“阳刻”与“阴刻”,阳刻:外框和文字为印泥颜色、空白处为背景颜色;阴刻:外框和文字为背景颜色、空白处为印泥颜色。

用turtle制作印章时,阳刻用印泥色绘制方框,用背景色填色,再用印泥色绘制文字;阴刻用背景色绘制方框,用印泥色填色,再用背景色绘制文字。参见图1。

印章(左为阳刻、右为阴刻) 

三、文字竖排显示输出

turtle绘制文字使用write()方法,语法结构如下:

write(arg, move=False,, font=('Arial', 8,'normal'))

其中:arg为必选参数,用于指定要输出的文字内容,该内容以当前光标所在坐标为左下角输出到屏幕;move(可选参数),逻辑值,指定光标是否跟随,默认为False,不跟随(光标位置不变);align(可选参数)用于设置对齐方式,取'left'、'center'或'right'中的一个,表示左对齐、居中对齐或右对齐,默认为左对齐;font(可选参数)用于设置字体、字号和字型,为三元组(字体名称, 字号大小, 字型)。

说明:如果move设置为True,光标将移动到输出文字的右下角;字型设为'normal'表示正常、'bold'表示粗体、'italic'表示斜体、'underline'表示加下划线等。

由于同字体同字号的汉字的宽度是相同的,所以只要字与字之间加入换行符(\n)用write()方法显示输出时就会显示在同一列上。

str = '这是个测试'

str = '\n'.join(list(str))

write(str, font=('汉仪行楷繁', 36))

2 文字竖排效果图 

四、制作书法作品《鸟鸣涧》

唐王维《鸟鸣涧》诗为五言四句:

人闲桂花落,夜静春山空。

月出惊山鸟,时鸣春涧中。

竖排基本上呈方形,用“团扇”格式表达比较合适。先绘制圆形“团扇”,再在其上从右到左书写《鸟鸣涧》四名诗,在左侧添加落款和印章。

完整的制作程序如下:

############################################
# 设计 Zhang Ruilin  创建 2021-12-15 07:26 #
# Python用turtle制作书法作品——《鸟鸣涧》 #
# 要运行本程序并产生书法效果,您的电脑需要 #
# 安装印章篆体、方正小篆体和汉仪行楷繁字体 #
############################################
import turtle as tl

tl.setup(600,600)
tl.bgcolor('ivory')				# 象牙色,作品装裱色
bgcolor = 'wheat'				# 小麦色,作品背景色
tl.dot(550, bgcolor)

def downwards(_str,_font,_size=45):		# 文字转竖排,从上向下显示
    _words = list(_str)				# 字符转列表
    _str = '\n'.join(_words)			# 列表连接成字符串
    tl.write(_str,font=(_font,_size,'normal'))	# 竖排显示输出

def yin(_word='red',_back='white'):				# 绘制印章,_word印章颜色,
    tl.pensize(1)				# _back印章背景色,控制_word
    tl.color(_word,_back)			# 和_back可产生阳刻和阴刻效果
    tl.begin_fill()
    tl.rt(45)
    tl.pd()
    tl.circle(20,steps=4)
    tl.end_fill()
    tl.lt(45)
    tl.fd(3)
    tl.write('瑞\n林',font=('印章篆体',10,'normal'))
    tl.fd(13)
    tl.write('张\n印',font=('印章篆体',10,'normal'))
    tl.pu()

if __name__ == '__main__':
    tl.pu()
    tl.goto(150,-160)
    downwards('人闲桂花落','方正小篆体',45)
    tl.goto(70,-160)
    downwards('夜静春山空','方正小篆体',45)
    tl.goto(-10,-160)
    downwards('月出惊山鸟','方正小篆体',45)
    tl.goto(-90,-160)
    downwards('时鸣春涧中','方正小篆体',45)

    tl.goto(-150,-100)
    downwards('鸟鸣涧诗 唐王维','汉仪行楷繁',15)
    tl.goto(-180,-150)
    downwards('辛丑年冬月瑞林制作于杭州','汉仪行楷繁',15)
    tl.goto(-155,-135)
    yin('red',bgcolor)
    tl.goto(-155,-170)
    yin(bgcolor,'red')
    tl.ht()
tl.done()

执行结果如下:

3 由上述程序生成的书法作品《鸟鸣涧》 

当句子比较长时,可以布局为楹联格式,如图4所示。

图4 书法作品《易经第一卦》

### 创意小型项目示例 #### 文本冒险游戏 创建一个简单的文本冒险游戏可以让玩家通过输入命令来探索虚拟世界。这个游戏可以利用条件语句和循环结构,使程序能够响应不同的用户输入。 ```python def start_adventure(): print("欢迎来到神秘岛屿!") choice = input("你想去森林还是海滩? 输入'森林'或'海滩': ") if choice.lower() == '森林': forest_scene() elif choice.lower() == '海滩': beach_scene() else: print("未知选项,请重新选择.") start_adventure() def forest_scene(): print("你在茂密的树林里发现了闪闪发光的东西...") # 继续编写更多场景... start_adventure() ``` 此代码展示了如何构建基本的游戏框架[^1]。 #### 图形化石头剪刀布小游戏 使用`tkinter`库制作图形界面版的猜拳游戏。这个项目涉及GUI设计以及事件处理机制的学习。 ```python import tkinter as tk from random import randint choices = ['石头', '剪刀', '布'] def play(user_choice): computer_choice = choices[randint(0, 2)] result_text.set(f"你选择了{user_choice}, 计算机选了 {computer_choice}") outcome = determine_winner(user_choice, computer_choice) message_label.config(text=outcome) root = tk.Tk() result_text = tk.StringVar(value="") message_label = tk.Label(root, textvariable=result_text) message_label.pack() for c in choices: button = tk.Button(root, text=c, command=lambda ch=c: play(ch)) button.pack(side='left') root.mainloop() ``` 这段代码实现了简单的人机对抗逻辑并提供了可视化交互方式。 #### 自动天气提醒工具 借助第三方API获取实时气象数据,并设置定时任务每天早上发送邮件通知给指定收件人关于当天的天气情况。这有助于熟悉HTTP请求操作及自动化调度技术的应用。 ```python import smtplib import requests from email.mime.text import MIMEText from datetime import datetime def get_weather(city_name): api_key = "your_api_key_here" url = f"http://api.openweathermap.org/data/2.5/weather?q={city_name}&appid={api_key}" response = requests.get(url).json() weather_description = response['weather'][0]['description'] temperature = round(response['main']['temp'] - 273.15, 1) # 转换为摄氏度 return {"temperature": temperature, "condition": weather_description} def send_email(to_address, subject, body): from_addr = "sender@example.com" msg = MIMEText(body) msg["Subject"] = subject server = smtplib.SMTP('smtp.example.com') try: server.login(from_addr, "password") server.sendmail(from_addr, [to_address], msg.as_string()) finally: server.quit() if __name__ == "__main__": city_of_interest = "Beijing" current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") weather_info = get_weather(city_of_interest) mail_content = ( f"{current_time}\n\n城市:{city_of_interest}\n温度:{weather_info['temperature']}°C\n状况:" + weather_info["condition"] ) send_email("recipient@example.net", "每日天气预报", mail_content) ``` 上述例子说明了一个完整的网络服务调用流程及其实际应用场景中的运用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值