【python实操】python小程序之计算对象个数、游戏更新分数

news2024/10/25 15:31:25

引言

python小程序之计算对象个数、游戏更新分数

文章目录

  • 引言
  • 一、计算对象个数
    • 1.1 题目
    • 1.2 代码
    • 1.3 代码解释
      • 1.3.1 代码结构
      • 1.3.2 模块解释
      • 1.3.3 解释输出
  • 二、游戏更新分数
    • 2.1 题目
    • 2.2 代码
    • 2.3 代码解释
      • 2.3.1 定义 `Game` 类
      • 2.3.2 创建 `Game` 实例并调用方法
  • 三、思考
    • 3.1 计算对象个数
    • 3.2 游戏更新分数

一、计算对象个数

1.1 题目

定义一个 Dog 类, 定义一个类属性 count,用来记录创建该类对象的个数. (即每创建一个对象,count 的值就要加1)实例属性 name

1.2 代码

class Dog:
    count = 0

    def __init__(self, name):
        self.name = name
        Dog.count += 1


black_dog = Dog('小黑')
print(Dog.count)
print(black_dog.count)

white_dog = Dog('老白')
print(Dog.count)
print(white_dog.count)

red_dog = Dog('小红')
print(Dog.count)
print(red_dog.count)

输出结果:
在这里插入图片描述

1.3 代码解释

这段代码定义了一个 Dog 类,并使用类变量 count 来记录创建的 Dog 实例的数量

1.3.1 代码结构

class Dog:
    count = 0  # 类变量,用于记录 Dog 实例的数量

    def __init__(self, name):
        self.name = name  # 实例变量,存储狗的名字
        Dog.count += 1  # 每次创建一个新的 Dog 实例时,增加 count 的值

# 创建 Dog 实例并打印 count
black_dog = Dog('小黑')
print(Dog.count)  # 打印类变量 count
print(black_dog.count)  # 打印实例 black_dog 的 count

white_dog = Dog('老白')
print(Dog.count)  # 打印类变量 count
print(white_dog.count)  # 打印实例 white_dog 的 count

red_dog = Dog('小红')
print(Dog.count)  # 打印类变量 count
print(red_dog.count)  # 打印实例 red_dog 的 count

1.3.2 模块解释

  1. 类定义:

    • class Dog: 定义了一个名为 Dog 的类
    • count = 0 是一个类变量,它属于整个类而不是某个特定的实例。这个变量用于记录创建了多少个 Dog 实例
  2. 构造函数:

    • def __init__(self, name):Dog 类的构造函数,当创建一个新的 Dog 实例时会调用它
    • self.name = name 将传入的名字赋值给实例变量 name
    • Dog.count += 1 每次创建一个新的 Dog 实例时,将类变量 count 增加 1
  3. 创建实例并打印 count:

    • black_dog = Dog('小黑') 创建了一个 Dog 实例 black_dog,名字为 ‘小黑’。此时 count 变为 1
    • print(Dog.count) 打印类变量 count,输出 1
    • print(black_dog.count) 打印 black_dog 实例的 count。注意,这里实际上访问的是类变量 count,因为 black_dog 实例并没有自己的 count 属性
  4. 创建更多的实例并打印 count:

    • white_dog = Dog('老白') 创建了另一个 Dog 实例 white_dog,名字为 ‘老白’。此时 count 变为 2
    • print(Dog.count) 打印类变量 count,输出 2
    • print(white_dog.count) 打印 white_dog 实例的 count,输出 2
  5. 继续创建实例并打印 count:

    • red_dog = Dog('小红') 创建了第三个 Dog 实例 red_dog,名字为 ‘小红’。此时 count 变为 3
    • print(Dog.count) 打印类变量 count,输出 3
    • print(red_dog.count) 打印 red_dog 实例的 count,输出 3

1.3.3 解释输出

  • 第一次创建 Dog 实例 black_dog 后,count 变为 1
  • 第二次创建 Dog 实例 white_dog 后,count 变为 2
  • 第三次创建 Dog 实例 red_dog 后,count 变为 3

每次打印 Dog.countinstance.count 都是相同的,因为它们都引用了同一个类变量 count。在 Python 中,如果实例没有自己的属性,那么访问该属性时会查找类中的同名属性

通过这种方式,可以跟踪和管理创建的 Dog 实例数量。这对于需要统计或限制实例数量的应用场景非常有用

二、游戏更新分数

2.1 题目

定义一个游戏类 Game , 包含实例属性 玩家名字( name )

  1. 要求记录游戏的最高分( top_score 类属性),
  2. 定义方法: show_help 显示游戏的帮助信息 输出 这是游戏的帮助信息
  3. 定义方法: show_top_score , 打印输出游戏的最高分
  4. 定义方法: start_game , 开始游戏, 规则如下:
    4.1 使用随机数获取本次游戏得分 范围 (10 - 100 )之间
    4.2 判断本次得分和最高分之间的关系
    4.2.1 如果本次得分比最高分高,修改最高分
    4.2.2 如果分数小于等于最高分,则不操作
    4.3 输出本次游戏得分

2.2 代码

import random
class Game:
    def __init__(self, name, top_score):
        self.name = name
        self.top_score = top_score

    def show_help(self):
        print('这是游戏的帮助信息')

    def show_top_score(self):
        print(f'游戏的最高分是:{self.top_score}')

    def start_game(self):
        print(f'{self.name}开始游戏')
        r = random.randint(10, 101)
        if r >= self.top_score:
            self.top_score = r
        print(f'{self.name}本次游戏得分是:{self.top_score}')


test_game = Game('test', 50)
test_game.show_help()
print('-'*30)
test_game.show_top_score()
print('-'*30)
test_game.start_game()

输出结果:
在这里插入图片描述

2.3 代码解释

这段代码定义了一个名为 Game 的类,并创建了一个 Game 类的实例 test_game

2.3.1 定义 Game

import random  # 导入 random 模块以生成随机数

class Game:
    def __init__(self, name, top_score):
        self.name = name          # 初始化游戏的名字
        self.top_score = top_score  # 初始化游戏的最高分

    def show_help(self):
        print('这是游戏的帮助信息')  # 显示帮助信息

    def show_top_score(self):
        print(f'游戏的最高分是:{self.top_score}')  # 显示当前游戏的最高分

    def start_game(self):
        print(f'{self.name} 开始游戏')  # 打印玩家开始游戏的信息
        r = random.randint(10, 101)  # 生成一个 10 到 100 之间的随机整数(包括 10 和 100)
        if r >= self.top_score:      # 如果这次的游戏得分大于或等于历史最高分
            self.top_score = r       # 更新最高分
        print(f'{self.name} 本次游戏得分是:{r}')  # 打印本次游戏的实际得分
  • 构造函数 __init__:

    • 接收两个参数 nametop_score
    • self.name 存储玩家的名字
    • self.top_score 存储游戏的最高分
  • 方法 show_help:

    • 打印一条帮助信息
  • 方法 show_top_score:

    • 打印当前游戏的最高分
  • 方法 start_game:

    • 打印玩家开始游戏的信息。
    • 生成一个 10 到 100 之间的随机整数 r
    • 如果 r 大于或等于当前的最高分 self.top_score,则更新 self.top_scorer
    • 打印本次游戏的实际得分 r

2.3.2 创建 Game 实例并调用方法

test_game = Game('test', 50)  # 创建 Game 类的一个实例,名字为 'test',初始最高分为 50
test_game.show_help()         # 调用 show_help 方法显示帮助信息
print('-'*30)                 # 打印一行分割线
test_game.show_top_score()    # 调用 show_top_score 方法显示当前最高分
print('-'*30)                 # 再打印一行分割线
test_game.start_game()        # 调用 start_game 方法开始游戏
  • 创建 Game 实例:

    • test_game = Game('test', 50) 创建了一个 Gam 类的实例 test_game,设置了玩家名字为 'test',并且设置初始最高分为 50
  • 调用 show_help 方法:

    • test_game.show_help() 调用 show_help 方法来显示游戏的帮助信息
  • 打印分割线:

    • print('-'*30) 打印一行由破折号组成的线,作为视觉上的分隔
  • 调用 show_top_score 方法:

    • test_game.show_top_score() 调用 show_top_score 方法来显示游戏的当前最高分
  • 再次打印分割线:

    • print('-'*30) 再次打印一行分割线
  • 调用 start_game 方法:

    • test_game.start_game() 调用 start_game 方法来开始一次游戏过程。这将:
      • 打印玩家开始游戏的信息
      • 生成一个随机分数
      • 如果新产生的分数高于或等于之前的最高分,那么最高分将会被更新
      • 打印本次游戏的实际得分

在这个例子中,test 的本次游戏得分为 53,超过了初始最高分 50,因此最高分被更新为 53

通过这种方式,可以看到如何使用类和方法来组织和实现一个简单的游戏逻辑

三、思考

3.1 计算对象个数

  • 在类中添加count属性,实现跟踪和管理创建的 Dog 实例数量

3.2 游戏更新分数

  • 初始化分数,并且通过if条件判断实现分数的更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++之String类模拟实现(下)

片头 哈喽~小伙伴们,在上一篇中,我们讲解了C的string类的相关函数,这一章中,我们将继续深入学习string类函数,准备好了吗?咱们开始咯~ 五、对内容进行修改 ⑤insert函数 在指定位置插入字符或者字符串 …

基于Raspberry Pi人脸识别自动门

人脸识别自动门 简介 在当今数字化时代,智能家居安全变得越来越重要。今天,我要向大家介绍一个结合了安全性与便利性的项目——人脸识别自动门。这个项目通过在门上实施基于面部识别的高级安全系统,使用摄像头验证房主的面部,自…

重学SpringBoot3-集成Spring Boot Actuator

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Spring Boot Actuator 1. 什么是 Spring Boot Actuator?2. Spring Boot Actuator 的核心功能3. Spring Boot 3 中集成 Actuator3.1 添加…

ElasticSearch是什么?

1.概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计,提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的硬…

2014年国赛高教杯数学建模C题生猪养殖场的经营管理解题全过程文档及程序

2014年国赛高教杯数学建模 C题 生猪养殖场的经营管理 某养猪场最多能养10000头猪,该养猪场利用自己的种猪进行繁育。养猪的一般过程是:母猪配种后怀孕约114天产下乳猪,经过哺乳期后乳猪成为小猪。小猪的一部分将被选为种猪(其中公…

20240727 影石 笔试

文章目录 1、选择题1.11.21.31.41.51.61.71.81.91.10 2、简答题2.12.22.32.42.52.62.72.8 3、编程题3.1 岗位:云台嵌入式工程师-2025校招 题型:10 道选择题,8 道简答题,1 道编程题 1、选择题 1.1 【多选】以下关于DMA的描述哪些…

Pytest中fixture含返回值时如何隐式自动应用?

在我们使用 Pytest 框架进行自动化测试时,强大的 fixture 夹具为框架的灵活应用提供了极大的便利。比如我们可以利用 fixture 的autouse属性,使它在测试方法的不同范围层级上自动生效。但如果要引用fixture的返回,我们通常还是要明确指定&…

FMEA 在智能制造中的应用与挑战_SunFMEA

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 FMEA(失效模式与影响分析)在智能制造中具有重要的应用价值,但同时也面临着一系列的挑战。 应用: 产品设计优化 在…

react18+react-transition-group实现路由切换过度

效果如下 官网安装对应的插件 创建对应的样式 .fade-enter {opacity: 0; } .fade-exit {opacity: 1; } .fade-enter-active {opacity: 1; } .fade-exit-active {opacity: 0; } .fade-enter-active, .fade-exit-active {transition: opacity 500ms; }const location useLoca…

WSL(Windows Subsystem for Linux)——简单的双系统开发

文章目录 WSLWSL的作用WSL的使用WSL的安装挂载磁盘的作用安装linux发行版wsl下载mysql,mongodb,redis WSL 前言:本人由于在开发中需要linux环境,同时还想要直接在Windows下开发,来提升开发效率,随即简单学…

【问题分析】使用gperftools分析排查内存问题

背景 当程序长时间允许时(压测、服务器程序),就会面临更大的挑战,其中内存泄漏就是一类典型的问题,内存泄漏往往不易发现,导致的现象更是千奇百怪,本文主要介绍如何借助gperftools分析一个模块的内存泄漏 案例代码 …

SpringBoot框架在高校竞赛管理中的创新应用

3系统分析 3.1可行性分析 通过对本高校学科竞赛平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本高校学科竞赛平台采用SSM框架,JAVA作为开发语…

编译/引导EDK2 树莓派4

格蠹的幽兰代码本(RK3588)支持UEFI启动,在阅读RK3588代码的时候发现EDK2也对树莓派系列进行了支持。经过一番尝试,借助幽兰,我也在树莓派上bringup EFI bios(只能引导到Bios setup界面,不知道如何安装OS),在此记录SOP。…

1.Label Studio 介绍

Label Studio 介绍 文章目录 Label Studio 介绍前言一、安装介绍二、Run with Docker Compose1、WSL2安装2、Docker Desktop安装3、Label Studio安装(第二种方法 Run with Docker Compose ) 三、Install for local development1.下载源码2.安装poetry3.安…

YOLO11改进 | 注意力机制 | 用于增强小目标感受野的RFEM

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 近年来,基于深度学习的人脸检…

【计算机网络】计算机网络相关术语

文章目录 NAT概述NAT的基本概念NAT的工作原理1. **基本NAT(静态NAT)**2. **动态NAT**3. **NAPT(网络地址端口转换,也称为PAT)** 底层实现原理1. **数据包处理**2. **转换表**3. **超时机制** NAT的优点NAT的缺点总结 P…

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …

linux 下 verilog 简明开发环境附简单实例

author: hjjdebug date: 2024年 10月 12日 星期六 10:34:13 CST descripton: linux 下 verilog 简明开发环境附简单实例 甲: 安装软件 1. sudo apt install iverilog 该包verilog 源代码的编译器iverilog&#xff0c;其输出是可执行的仿真文件格式vvp格式 它可以检查源代码中…

ubuntu20.4环境下gcc-aarch64交叉编译器的安装

交叉编译器&#xff08;Linux环境&#xff09;arm gcc 8.3一共有5个版本&#xff0c;常用的有4个版本&#xff08;另外一个为大端linux版本&#xff09;&#xff0c;分别是32bit裸机版本&#xff08;arm-eabi&#xff09;、64bit裸机版本&#xff08;aarch64-elf&#xff09;、…

4. 单例模式线程安全问题--是否加锁

单例模式线程安全问题--是否加锁 是否加锁问题指什么&#xff1f;解决多线程并发来带的问题继承MonoBehaviour的单例模式不继承MonoBehaviour的单例模式 总结 是否加锁问题指什么&#xff1f; 如果程序当中存在多线程&#xff0c;我们需要考虑当多个线程同时访问同一个内存空间…