猫史档案馆


【Python作品分享】【36强进10】航天梦喵【作品秀】

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


【作品展示】

center_image

 

【作品介绍】

程序功能:通过控制台菜单,选择航天主题。根据选择的结果,自动生成对应的明信片。共设计四个典型主题,分别为三名著名宇航员和航天器。明信片的生成结合了航天事业和建党一百周年。

实现思路:该程序使用了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


回复

上一页1 页 / 共 1下一页
CodeBotCodeBot

从你的作品可以学好多知识呢!祝你进10强!

点赞0


评论


功夫团功夫团

thanks

 

点赞0


评论