用户:
功夫团查看:0 回复:2 评论:0 创建时间:2021-05-22T11:54:43
【作品展示】

【作品介绍】
程序功能:通过控制台菜单,选择航天主题。根据选择的结果,自动生成对应的明信片。共设计四个典型主题,分别为三名著名宇航员和航天器。明信片的生成结合了航天事业和建党一百周年。实现思路:该程序使用了turtle、time、 random,三个库。开始先设计登陆函数获取键盘输入用户名并检查格式,判断了一些异常格式情况。接着进入航天主题选择菜单,根据选择调用不同的生成函数。各类生成函数主要功能有:1)星星颜色、形状、大小随机产生,且组合成特定格式;2)人物生成打印,根据性别着色;3)火箭、已探索过的星球等组合生成。
【作品源代码】
import turtle
import time
import turtle as sky
from random import randint, random
global p
def print_contex(x):
sky.penup()
sky.goto(-400,260)
sky.pendown()
sky.color('red')
sky.write(x, move=False,
align='left', font=('楷体', 32, 'normal'))
def print_contex_xyc(x,y,col,contex):
sky.penup()
sky.goto(x, y)
sky.pendown()
sky.color(str(col))
sky.write(contex, move=False,
align='left', font=('微软雅黑', 16, 'normal'))
def print_contex_botom(x):
sky.penup()
sky.goto(-400, -300)
sky.pendown()
sky.color('red')
sky.write(x, move=False,
align='left', font=('黑体', 24, 'normal'))
def login():
p = input('欢迎您(输入您的用户名并按下回车键确认即可,谢谢):')
p = p.喵()
if (p == ''):
p = '匿名用户'
print('欢迎', p, '登陆。')
return p
def choice():
while True:
time.sleep(1)
print('请选择航天英雄主题')
print('1.杨利伟')
print('2.刘洋')
print('3.翟志刚')
print('4.航天器系列')
print('5.退出')
a = input('请选择一个(序号):')
if (a == '1' or a == '2' or a == '3' or a == '4' or a == '5'):
if (a == '1'):
sky.clear()
sky.clearscreen()
sky.Screen().bgcolor('black')
print_contex_botom('杨利伟-中国首位航天英雄')
spacehero(a)
elif (a == '2'):
sky.clear()
sky.clearscreen()
sky.Screen().bgcolor('white')
print_contex_botom('刘洋-中国首位女航天英雄')
spacehero(a)
elif (a == '3'):
sky.clear()
sky.clearscreen()
sky.Screen().bgcolor('blue')
print_contex_botom('翟志刚-中国首位太空漫步航天英雄')
spacehero(a)
elif (a == '4'):
sky.clear()
sky.clearscreen()
spacecraft()
elif (a == '5'):
sky.clear()
sky.clearscreen()
print('用户',p,'退出程序')
return
print('画面生成。')
else:
print('输入错误,请重新输入。')
def print_usname(x):
usname='欢迎用户:'+x
sky.penup()
sky.goto(-400, 340)
sky.pendown()
sky.color('orange')
sky.write(usname, move=False,
align='left', font=('宋体', 15, 'normal'))
def spacecraft():
sky.Screen().bgcolor('black')
sky.hideturtle()
sky.pencolor('orange')
sky.penup()
sky.goto(-300, 0)
sky.pendown()
sky.dot(120)
print_contex_xyc(-320, -10, 'blue', '火星')
print_contex_xyc(-430, 130, 'orange', '中国火星探测器--祝融号')
sky.pencolor('white')
sky.penup()
sky.goto(0, 0)
sky.pendown()
sky.dot(70)
print_contex_xyc(-30, -20, 'black', '月球')
print_contex_xyc(-150, -100, 'white', '中国月球探测器--嫦娥号')
sky.pencolor('green')
sky.penup()
sky.goto(300, 0)
sky.pendown()
sky.dot(150)
print_contex_xyc(270, -20, 'white', '地球')
print_contex_xyc(50, 150, 'green', '中国环地球空间站--天宫号')
print_usname(p)
print_contex('中国航天事业与百年党庆')
rocket(350, -180)
def spacehero(x):
print_usname(p)
print_contex('中国航天事业与百年党庆')
draw_100(-400, -100, 6)
if(x=='2'):
c='red'
else:
c='green'
draw_robit(300,100,c)
rocket(350,-180)
def draw_star(points, size, col, x, y):
sky.hideturtle()
sky.speed(0)
sky.penup()
sky.goto(x,y)
sky.pendown()
angle=180-(180/points)
sky.color(col)
sky.begin_fill()
for i in range(points):
sky.forward(size)
sky.right(angle)
sky.end_fill()
def draw_100(x,y,z):
line_h=40
line_w=120
num_star=z
for j in range(5):
for i in range(num_star):
ranPts = randint(2, 5)*2+1
ranSize = randint(50, 55)
ranCol = (random(), random(), random())
ranX = x+j*line_w
ranY = line_h*i+y
draw_star(ranPts, ranSize, ranCol, ranX, ranY)
ranCol = (random(), random(), random())
ranPts = randint(2, 5)*2+1
ranSize = randint(30, 50)
draw_star(ranPts, ranSize, ranCol, x+line_w+line_w/2, y)
ranCol = (random(), random(), random())
ranPts = randint(2, 5)*2+1
ranSize = randint(30, 50)
draw_star(ranPts, ranSize, ranCol, x+line_w*3+line_w/2, y)
ranCol = (random(), random(), random())
ranPts = randint(2, 5)*2+1
ranSize = randint(30, 50)
draw_star(ranPts, ranSize, ranCol, x+line_w+line_w/2, y+line_h*(num_star-1))
ranCol = (random(), random(), random())
ranPts = randint(2, 5)*2+1
ranSize = randint(30, 50)
draw_star(ranPts, ranSize, ranCol, x+line_w*3+line_w/2, y+line_h*(num_star-1))
def rectangle(x, y, c):
sky.pendown()
sky.hideturtle()
sky.pensize(1)
sky.color(c)
sky.begin_fill()
for i in range(1, 3):
sky.forward(x)
sky.right(90)
sky.forward(y)
sky.right(90)
sky.end_fill()
sky.penup()
def draw_robit(x,y,c):
sky.penup()
sky.speed(0)
sky.goto(-100+x, -150+y)
rectangle(50, 20, 'blue')
sky.goto(-30+x, -150+y)
rectangle(50, 20, 'blue')
sky.goto(-25+x, -50+y)
rectangle(15, 100, 'grey')
sky.goto(-55+x, -50+y)
rectangle(-15, 100, 'grey')
sky.goto(-90+x, 100+y)
rectangle(100, 150, str(c))
sky.goto(-150+x, 70+y)
rectangle(60, 15, 'grey')
sky.goto(-150+x, 110+y)
rectangle(15, 40, 'grey')
sky.goto(10+x, 70+y)
rectangle(60, 15, 'grey')
sky.goto(55+x, 110+y)
rectangle(15, 40, 'grey')
sky.goto(-50+x, 120+y)
rectangle(15, 20, 'grey')
sky.goto(-85+x, 170+y)
rectangle(80, 50, str(c))
sky.goto(-60+x, 160+y)
rectangle(30, 10, 'white')
sky.goto(-55+x, 155+y)
rectangle(5, 5, 'black')
sky.goto(-40+x, 155+y)
rectangle(5, 5, 'black')
sky.goto(-65+x, 135+y)
rectangle(40, 5, 'black')
def rocket(x, y):
sky.hideturtle()
sky.begin_fill()
sky.pensize(7)
sky.speed(0)
sky.penup()
sky.begin_fill()
sky.goto(0+x, 0+y)
sky.pendown()
for i in range(3):
sky.color('orange')
sky.left(120)
sky.forward(100)
for i in range(2):
sky.right(90)
sky.forward(150)
sky.right(90)
sky.forward(100)
sky.end_fill()
sky.color('red')
sky.penup()
sky.goto(-50+x, -165+y)
sky.right(90)
sky.pendown()
sky.forward(50)
sky.penup()
sky.goto(-50-20+x, -165+y)
sky.right(45)
sky.pendown()
sky.forward(50)
sky.penup()
sky.goto(-50+20+x, -165+y)
sky.left(90)
sky.pendown()
sky.forward(50)
print_contex_xyc(x-102,y-50,'blue','中国航天')
def exit_draw():
sky.Screen().bgcolor('black')
sky.clear()
sky.hideturtle()
pp = '再见'+p
print_contex_xyc(-50, 330, 'red', pp)
sky.speed(0)
sky.pensize(3)
sky.penup()
sky.goto(0,0)
sky.pendown()
colors = ['red', 'yellow', 'blue', 'purple']
for i in range(450):
sky.left(91)
sky.forward((i + 13))
sky.pencolor(colors[(i % 4)])
p = login()
choice()
exit_draw()
sky.done()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn