Python学习日志2021-10-03

C3算法与MRO序列

  • 面向对象编程的进阶部分:继承与多态

在这里插入图片描述

在这里插入图片描述
当前类 最底层D的未查找的父类列表 预查找的父类 预查找父类是否是object 预查找父类是否还有的子类? 同时又是底层查找类的父类 实际取出的类
D C1, C2, C3 C1 - - C1
C1 C2, C3 B1 - 有,C2 C2
C2 C3 B1 - - B1
B1 C3 A1 - - A1
A1 C3 object 是,但最底层D还有父类C3未取出 - C3
C3 - B2 - - B2
B2 - A2 - 是,B3 B3
B3 - A2 - - A2
A2 - object 是,最底层D已经没有父类未取出了 是,A3 A3
A3 - object 是 - object
————————————————

原文链接https://blog.csdn.net/u011467553/article/details/81437780
map函数
map是python内置函数,会根据提供的函数对指定的序列做映射。

map()函数的格式是:map(function,iterable,...)第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。
https://blog.csdn.net/quanlingtu1272/article/details/95482253?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163323999716780366556922%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163323999716780366556922&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-95482253.first_rank_v2_pc_rank_v29&utm_term=map%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187
抽象基类@abc.abstractmethod
抽象基类我们通过一些装饰器或者特殊的方法来把类里的方法虚化,虚化后的方法不能通过当前类调用,必须使用子类继承并且实现该方法才能调用该方法
而@abc.abstractmethod是我们用来虚化方法的装饰器
如果父类使用了@abc.abstractmethod装饰器,而子类没有将每一个父类重写都会报错,抽象基类也是这个原理
Python2和Python3中@abstractmethod的用法

pygame初始

  • 基于tkinter模块的GUI
    GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件。当然Tk并不是最新和最好的选择,也没有功能特别强大的GUI控件,事实上,开发GUI应用并不是Python最擅长的工作,如果真的需要使用Python开发GUI应用,wxPython、PyQt、PyGTK等模块都是不错的选择。

基本上使用tkinter来开发GUI应用需要以下5个步骤:

导入tkinter模块中我们需要的东西。
创建一个顶层窗口对象并用它来承载整个GUI应用。
在顶层窗口对象上添加GUI组件。
通过代码将这些GUI组件的功能组织起来。
进入主事件循环(main loop)。

使用Pygame进行游戏开发
Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让游戏开发者不再被底层语言束缚,可以更多的关注游戏的功能和逻辑。

from enum import Enum, unique
from math import sqrt
from random import randint

import pygame

@unique
class Color(Enum):
“”“颜色”""

RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (242, 242, 242)

@staticmethod
def random_color():
    """获得随机颜色"""
    r = randint(0, 255)
    g = randint(0, 255)
    b = randint(0, 255)
    return (r, g, b)

class Ball(object):
“”“球”""

def __init__(self, x, y, radius, sx, sy, color=Color.RED):
    """初始化方法"""
    self.x = x
    self.y = y
    self.radius = radius
    self.sx = sx
    self.sy = sy
    self.color = color
    self.alive = True

def move(self, screen):
    """移动"""
    self.x += self.sx
    self.y += self.sy
    if self.x - self.radius <= 0 or \
            self.x + self.radius >= screen.get_width():
        self.sx = -self.sx
    if self.y - self.radius <= 0 or \
            self.y + self.radius >= screen.get_height():
        self.sy = -self.sy

def eat(self, other):
    """吃其他球"""
    if self.alive and other.alive and self != other:
        dx, dy = self.x - other.x, self.y - other.y
        distance = sqrt(dx ** 2 + dy ** 2)
        if distance < self.radius + other.radius \
                and self.radius > other.radius:
            other.alive = False
            self.radius = self.radius + int(other.radius * 0.146)

def draw(self, screen):
    """在窗口上绘制球"""
    pygame.draw.circle(screen, self.color,
                       (self.x, self.y), self.radius, 0)

def main():
# 定义用来装所有球的容器
balls = []
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption(‘大球吃小球’)
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 处理鼠标事件的代码
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
# 获得点击鼠标的位置
x, y = event.pos
radius = randint(10, 100)
sx, sy = randint(-10, 10), randint(-10, 10)
color = Color.random_color()
# 在点击鼠标的位置创建一个球(大小、速度和颜色随机)
ball = Ball(x, y, radius, sx, sy, color)
# 将球添加到列表容器中
balls.append(ball)
screen.fill((255, 255, 255))
# 取出容器中的球 如果没被吃掉就绘制 被吃掉了就移除
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball)
pygame.display.flip()
# 每隔50毫秒就改变球的位置再刷新窗口
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
# 检查球有没有吃到其他的球
for other in balls:
ball.eat(other)

if name == ‘main’:
main()

python库的安装

  • pip指令
    注意python与pip版本的预先检查,指令基本格式为`pip install XX
  • 手动安装
    官网下载后手动存放到相应位置,之后再使用命令行窗口进行安装
    参考
    python3中pygame安装过程(超级详细)

`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野生稚晖君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值