20213305张桉源《Python程序设计》实验四Python综合实验实验报告

课程:《Python程序设计》
班级:2133
姓名:张桉源
学号:20213305
实验教师:王志强
实验日期:2022年5月21日
必修/选修:公选课
一.实验内容
利用Python的pygame制作可视化时钟,在显示24小时制的数字时间的同时显示钟表页面,并在华为云上运行。

二.实验过程
1.实验代码:

import sys,random,math,pygame
from pygame import *
from datetime import datetime ,date,time
from math import *
def print_text(font,x,y,text,color=(255,255,255)):
    imgText=font.render(text,True,color)
    screen.blit(imgText,(x,y))
def wrap_angle(angle):
    return angle%360

pygame.init()
screen=pygame.display.set_mode((600,500))
pygame.display.set_caption("Clock")
font=pygame.font.Font(None,36)
orange=220,180,0
white=255,255,255
yellow=255,255,0
pink=255,100,100

pos_x=300
pos_y=250
radius=250
angle=360
while True:
    for event in pygame.event.get():
        if event.type==QUIT:
            sys.exit()
        keys=pygame.key.get_pressed()
        if keys[K_ESCAPE]:
            sys.exit()
    screen.fill((0,0,100))
    r=random.randint(0,255)
    g=random.randint(0,255)
    b=random.randint(0,255)
    color=r,g,b
    pygame.draw.circle(screen,color,(pos_x,pos_y),radius,6)

    for n in range(1,13):
        angle=radians(n*(360/12)-90)
        x=cos(angle)*(radius-20)-10
        y=sin(angle)*(radius-20)-10
        print_text(font,x+pos_x,y+pos_y,str(n))
    today=datetime.today()
    hours=today.hour%12
    minutes=today.minute
    seconds=today.second

    hour_angle=wrap_angle(hours*(360/12)-90)
    hour_angle=radians(hour_angle)
    hour_x=cos(hour_angle)*(radius-80)
    hour_y=sin(hour_angle)*(radius-80)
    target=pos_x+hour_x,pos_y+hour_y
    pygame.draw.line(screen,pink,(pos_x,pos_y),target,12)

    min_angle=wrap_angle(minutes*(360/60)-90)
    min_angle=radians(min_angle)
    min_x=cos(min_angle)*(radius-60)
    min_y=sin(min_angle)*(radius-60)
    target=pos_x+min_x,pos_y+min_y
    pygame.draw.line(screen,orange,(pos_x,pos_y),target,12)

    sec_angle=wrap_angle(seconds*(360/60)-90)
    sec_angle=radians(sec_angle)
    sec_x=cos(sec_angle)*(radius-40)
    sec_y=sin(sec_angle)*(radius-40)
    target=pos_x+sec_x,pos_y+sec_y
    pygame.draw.line(screen,yellow,(pos_x,pos_y),target,6)

    pygame.draw.circle(screen,yellow,(pos_x,pos_y),20)
    if hours<10:
        str_hours = '0'+str(hours)
    else:
        str_hours = str(hours)
    if minutes<10:
        str_minutes = '0'+str(minutes)
    else:
        str_minutes = str(minutes)
    if seconds<10:
        str_seconds = '0'+str(seconds)
    else:
        str_seconds = str(seconds)
    print_text(font,0,0,str_hours+":"+str_minutes+":"+str_seconds)
    pygame.display.update()

2.实验分析过程:
1)前提条件:成功安装pygame库

2)满足基本功能:
在显示数字化时间的同时,制作可视化时钟并实现时针,分针,秒针的转动
3)初始化界面,建立新窗口并列出所需表针不同颜色:

4)确定表盘圆心位置和半径:

5)分别画出时针,分针,秒针:

6)运行时的循环结构:

7)画一个表盘:

8)最后每次运行结束要刷新:

3.运行结果如图:

4.在华为云服务器上运行:

登录putty

上传文件

运行:

三.遇到的问题以及解决方法
1.由于最开始安装python是不清楚应该安装什么,导致pip未能正常安装,因此无法下载pygame库。
解决方案:最开始想找到下载位置逐步解决,但是没找到,于是全部彻底卸载,按照网络教程重新安装python,并成功下载pygame。
2.虽然有着以前C语言华为云实验的操作基础,但是进行的都是一些简单的代码,但是本次实验构建出显示界面,单纯通过WinFXP,putty无法实现本次实验。
解决方案:问知乎,问同学,在openEuler上安装桌面环境。

四.结课感悟
最开始报python这门课时我对编程相关的知识并不了解, 首先感谢这门课,感谢王老师,带着我在走进了编程的大门。对于平时的作业,无论是正则表达式,爬虫的制作,还是小游戏的制作,,每次作业的完成对我来说都是非常大的挑战。痛苦过后,也确实发现学会了一些东西,并且可以用在现实生活中,无论是应用还是娱乐。
因为是大一下,所以我在学习python的同时也在学习C语言,虽然有时候会不小心将二者知识弄混,但同时也发现了python真的是方便,最为深刻的感受是C语言用30行代码写的程序可以用python的2行代码搞定,这件事更加坚定了继续深度学习python的决心。
经过一个不到学期的学习,虽然没能将老师传授的所有知识消化,但是也学到了不少,感受最深的是王老师的教学理念———要去动手实践,身为标准的应试型学生,动手实践的过程对于我是新鲜又充满挑战的,动手操作的过程中也学到了很多,有点小遗憾的就是后期对于非计算机专业的初学者来说老师的授课速度有点快,理解速度总是跟不上老师的授课速度,同时一些知识对于我来说存在着断代的情况,希望老师能在的过程中也做出相关知识点的补充。

五.参考资料
https://zhuanlan.zhihu.com/p/229861153

posted @ 2022-05-28 10:29  2133张某  阅读(110)  评论(0编辑  收藏  举报