当前位置: 首页 > article >正文

从零开始:用Python语言基础构建宠物养成游戏:从核心知识到完整实战

一、代码分段拆解与知识点映射

 

1. 初始化游戏数据:变量与数据类型的综合应用

# 用字典存储宠物信息(嵌套字典+数字/字符串类型)
pet = {"name": "小雪",          # 字符串:宠物名字"age": 1,               # 整数:年龄"status": {             # 嵌套字典:状态信息(键值对存储复合数据)"health": 100,      # 整数:健康值"hunger": 50,       # 整数:饥饿值"mood": 80,         # 整数:心情值"is_sick": False    # 布尔值:状态标记(是否生病)},"skills": ["打滚", "卖萌"]  # 列表:有序、可变的技能集合
}# 玩家信息(字典类型)
player = {"name": "驯猫师",        # 字符串:玩家名称"score": 0              # 整数:得分系统
}

知识点解析:

 

①字典:用于存储结构化数据(如 pet 包含名字、年龄、嵌套的状态字典和技能列表),通过键名快速访问值(如 pet["status"]["health"] )。

②列表:存储同类数据(技能),支持增删改查(如后续可通过 pet["skills"].append("握手") 扩展技能)。

③布尔值: is_sick 标记宠物状态,用于条件判断(如生病时限制互动)。

 

2. 函数定义与调用:模块化编程的核心

# 函数:显示宠物当前状态
def show_status():"""用字符串拼接展示宠物状态"""status_msg = f"""
============= 宠物状态 =============
名字:{pet["name"]}
年龄:{pet["age"]:.1f}岁  # 浮点数格式化(保留1位小数)
健康值:❤️{pet["status"]["health"]}  
饥饿值:🍖{pet["status"]["hunger"]}  
心情值:😊{pet["status"]["mood"]}  
技能:{", ".join(pet["skills"])}  # 列表转字符串(用逗号拼接)
玩家得分:🎖️{player["score"]}
===================================
"""print(status_msg)

知识点解析:

 

①函数封装:将重复的状态显示逻辑封装为独立函数,避免代码冗余(如主循环中多次调用 show_status() )。

②字符串格式化:使用 f-string 动态拼接字符串(如 {pet["name"]} 直接插入字典值),提升可读性。

③列表转字符串:通过 ", ".join(列表) 将技能列表转为文本展示(如 ["打滚", "卖萌"] → "打滚, 卖萌" )。

# 函数:处理喂食指令
def feed():"""修改饥饿值和心情值(数字运算)"""food_effect = 25  # 常量:用变量存储固定值,方便修改pet["status"]["hunger"] = max(0, pet["status"]["hunger"] - food_effect)  # 防止饥饿值为负数pet["status"]["mood"] = min(100, pet["status"]["mood"] + 10)  # 心情值不超过上限100player["score"] += 5  # 得分累加(数字运算)print(f"✨ 喂食成功!{pet['name']}开心地吃了小鱼干~")

知识点解析:

 

①数字运算与边界控制:

❶ max(下限, 数值) 确保属性不低于最小值(如饥饿值≥0)。

❷ min(上限, 数值) 确保属性不超过最大值(如心情值≤100)。

②常量设计:用 food_effect 存储喂食效果值,若需调整数值只需修改一处,符合编程规范。

 

3. 游戏主循环:循环结构与条件语句的联动

while True:  # 无限循环,直到主动break退出show_status()  # 调用函数显示状态cmd = input("\n请输入指令(1.喂食 2.玩耍 3.休息 4.查看技能 5.退出):")# 多分支条件判断(指令合法性检查)if cmd == "1":feed()elif cmd == "2":play()elif cmd == "3":rest()elif cmd == "4":print(f"{pet['name']}的技能:{', '.join(pet['skills'])}")elif cmd == "5":print(f"退出游戏!最终得分:{player['score']}")break  # 退出循环else:print("❌ 无效指令!请输入1-5")continue  # 跳过本次循环剩余代码(直接进入下一轮循环)pass_time()  # 调用时间流逝函数# 条件语句嵌套:生病状态处理if pet["status"]["is_sick"]:print("❗ 必须先治疗才能继续互动!请尽快让宠物恢复健康~")continue  # 生病时不执行后续互动逻辑# 游戏结束条件(逻辑或运算)if pet["status"]["health"] <= 0 or pet["status"]["hunger"] >= 100:print(f"💔 {pet['name']}因健康值耗尽/饥饿值满格离开了...游戏结束!")break

知识点解析:

 

① while True 循环:构建游戏主流程,持续接收玩家指令,直到 break 触发退出。

② if-elif-else 多级判断:处理不同指令,覆盖正常输入、无效输入和退出场景。

③  continue 跳过逻辑:

❶ 输入无效指令时,跳过本轮剩余代码(如不执行 pass_time() )。

❷ 宠物生病时,跳过互动逻辑,强制结束回合。

④ 逻辑运算符:用 or 组合多个结束条件(健康值≤0 或 饥饿值≥100时游戏结束)。

4. 时间流逝函数:隐式循环与状态联动

def pass_time():"""用循环模拟时间流逝(虽然没有显式for/while,但每次调用会修改状态,形成隐式循环效果)"""pet["age"] += 0.1  # 浮点数运算:年龄增长(如1岁→1.1岁→1.2岁)pet["status"]["hunger"] = min(100, pet["status"]["hunger"] + 8)  # 饥饿值自然增长pet["status"]["mood"] = max(0, pet["status"]["mood"] - 6)  # 心情值自然下降# 条件语句:健康值触发状态变更if pet["status"]["health"] < 30 and not pet["status"]["is_sick"]:pet["status"]["is_sick"] = True  # 布尔值翻转(False→True)print(f"⚠️ 警告!{pet['name']}生病了!健康值低于30!")

知识点解析:

 

①浮点数应用:年龄用浮点数记录(如 0.1 模拟每日增长),体现数字类型的灵活性。

②状态联动:健康值低于30且未生病时,通过 is_sick = True 触发生病状态,结合主循环中的 continue 实现生病限制。

二、完整代码整合与运行说明

 

完整源码(与您提供的一致)

# ======================
# 1. 初始化游戏数据(变量与数据类型)
# ======================
pet = {"name": "小雪","age": 1,"status": {"health": 100,"hunger": 50,"mood": 80,"is_sick": False},"skills": ["打滚", "卖萌"]
}player = {"name": "驯猫师","score": 0
}# ======================
# 2. 定义游戏功能函数(函数定义与调用)
# ======================
def show_status():status_msg = f"""
============= 宠物状态 =============
名字:{pet["name"]}
年龄:{pet["age"]:.1f}岁  
健康值:❤️{pet["status"]["health"]}  
饥饿值:🍖{pet["status"]["hunger"]}  
心情值:😊{pet["status"]["mood"]}  
技能:{", ".join(pet["skills"])}  
玩家得分:🎖️{player["score"]}
===================================
"""print(status_msg)def feed():food_effect = 25pet["status"]["hunger"] = max(0, pet["status"]["hunger"] - food_effect)pet["status"]["mood"] = min(100, pet["status"]["mood"] + 10)player["score"] += 5print(f"✨ 喂食成功!{pet['name']}开心地吃了小鱼干~")def play():play_effect = 30pet["status"]["mood"] = min(100, pet["status"]["mood"] + play_effect)pet["status"]["health"] = max(0, pet["status"]["health"] - 15)player["score"] += 10print(f"🎉 和{pet['name']}玩了逗猫棒,它心情超好!")def rest():rest_effect = 35pet["status"]["health"] = min(100, pet["status"]["health"] + rest_effect)pet["status"]["hunger"] = min(100, pet["status"]["hunger"] + 10)player["score"] += 3print(f"😴 {pet['name']}睡了一觉,健康恢复啦~")def pass_time():pet["age"] += 0.1pet["status"]["hunger"] = min(100, pet["status"]["hunger"] + 8)pet["status"]["mood"] = max(0, pet["status"]["mood"] - 6)if pet["status"]["health"] < 30 and not pet["status"]["is_sick"]:pet["status"]["is_sick"] = Trueprint(f"⚠️ 警告!{pet['name']}生病了!健康值低于30!")# ======================
# 3. 游戏主循环(循环结构与条件语句)
# ======================
print(f"欢迎{player['name']}!开始照顾你的宠物吧~")while True:show_status()cmd = input("\n请输入指令(1.喂食 2.玩耍 3.休息 4.查看技能 5.退出):")if cmd == "1":feed()elif cmd == "2":play()elif cmd == "3":rest()elif cmd == "4":print(f"{pet['name']}的技能:{', '.join(pet['skills'])}")elif cmd == "5":print(f"退出游戏!最终得分:{player['score']}")breakelse:print("❌ 无效指令!请输入1-5")continuepass_time()if pet["status"]["is_sick"]:print("❗ 必须先治疗才能继续互动!请尽快让宠物恢复健康~")continueif pet["status"]["health"] <= 0:print(f"💔 {pet['name']}因健康值耗尽离开了...游戏结束!")breakif pet["status"]["hunger"] >= 100:print(f"🍔 {pet['name']}撑坏了!饥饿值满格!游戏结束!")break

三、知识点全景图:从零散到系统

核心知识点在游戏中的具体应用
变量与数据类型

①字典存储宠物/玩家信息

②列表存储技能

③布尔值标记状态

条件语句

①指令合法性判断

②状态阈值触发事件(如生病)

③游戏结束条件

循环结构

①while True主循环驱动游戏流程

②continue跳过异常逻辑

函数定义与调用

①封装状态显示、喂食/玩耍等独立功能

②代码复用与模块化

数字运算与边界控制

①max/min确保属性值在合理范围

②得分/属性增减运算

字符串与列表操作

①f-string 格式化输出

②join() 列表转字符

通过这个游戏,每个知识点都不再是孤立的语法,而是协同工作的“组件”。例如:

 

①字典为数据提供结构化存储,函数负责操作数据,条件语句根据数据状态决定流程,循环确保流程持续运行。

②这种“数据→逻辑→流程”的联动,正是Python编程的核心思维。

 

四、扩展建议:从基础到进阶

 

1. 新增治疗功能(强化条件语句)

def heal():if pet["status"]["is_sick"]:pet["status"]["health"] = min(100, pet["status"]["health"] + 50)pet["status"]["is_sick"] = False  # 治愈后重置布尔值player["score"] -= 20  # 治疗消耗得分print("💊 治疗成功!宠物恢复健康~")else:print("宠物当前未生病,无需治疗!")

在主循环中添加指令 6 调用 heal() ,结合 if pet["status"]["is_sick"] 判断是否可治疗。

2. 技能扩展系统(强化列表操作):

def learn_skill(skill):if skill not in pet["skills"]:pet["skills"].append(skill)  # 列表添加元素print(f"🐾 {pet['name']}学会了新技能:{skill}!")

喂食/玩耍时有概率触发技能学习(需导入 random 模块生成随机数)。

3. 文件存储功能(提前接触后续知识点):

import json  # 导入模块def save_game():with open("pet_save.json", "w") as f:json.dump(pet, f)  # 将字典存入文件print("游戏进度已保存!")def load_game():with open("pet_save.json", "r") as f:global pet  # 声明全局变量pet = json.load(f)  # 从文件读取数据print("游戏进度已加载!")

在主循环中添加指令 7/8 实现存档/读档,体验模块导入与文件操作。

 

通过以上拆解和扩展,您可以清晰看到Python基础核心知识如何支撑一个完整程序的运行。建议亲自运行代码,尝试修改参数(如调整 food_effect 数值、新增指令),在实践中加深对“数据驱动逻辑,逻辑控制流程”的理解~

感谢您的关注!精彩内容持续更新,期待与您共同探索编程世界!

相关文章:

从零开始:用Python语言基础构建宠物养成游戏:从核心知识到完整实战

一、代码分段拆解与知识点映射 1. 初始化游戏数据&#xff1a;变量与数据类型的综合应用 # 用字典存储宠物信息&#xff08;嵌套字典数字/字符串类型&#xff09; pet {"name": "小雪", # 字符串&#xff1a;宠物名字"age": 1, …...

labview设计一个虚拟信号发生器

目标&#xff1a;设计一个虚拟信号发生器&#xff0c;通过功能键的设置可以产生正弦波、三角波、方波和锯齿波&#xff0c;并可以通过输入控件设置采集信号的频率、幅值、相位等参数。 一、正弦波 &#xff08;1&#xff09;创建一个枚举 &#xff08;2&#xff09;点击属性后…...

工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比

工业路由器的技术优势 在现代工业环境中&#xff0c;网络连接的可靠性与效率直接影响生产效率和数据处理能力。WiFi 6&#xff08;即802.11ax&#xff09;和5G技术的结合&#xff0c;为工业路由器注入了强大的性能&#xff0c;使其成为智能制造、物联网和边缘计算的理想选择。…...

Chrome 插件网络请求的全面指南

在 Chrome 插件开发中&#xff0c;网络请求可以在多个上下文中实现&#xff0c;而不仅限于 background.js 和 content.js。以下是完整的网络请求实现方案&#xff1a; 一、主要请求实现位置 1. Background Script (后台脚本) 特点&#xff1a; 生命周期最长适合处理敏感数据…...

编译Qt5.15.16并启用pdf模块

编译Qt5.15.16并启用pdf模块 标题1.目录设置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必须&#xff0c;否则会提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …...

Python绘制新冠疫情的知识图谱

from pyvis.network import Network import networkx as nx import pandas as pd import os# 修复模板路径 from pyvis import network as net_moduleos.environ["PATH"] os.pathsep os.path.dirname(net_module.__file__)# 创建紧密连接图 g nx.Graph()# 关键修…...

canvas(三)-动画3d

在 <canvas> 中实现 3D 动画通常需要借助 WebGL 技术&#xff0c;因为原生的 2D 上下文&#xff08;CanvasRenderingContext2D&#xff09;无法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API&#xff0c;可以直接在浏览器中实现高性能的 3D 图形渲染。…...

使用RUST在Arduino上进行编程(MacOS,mega板)

近年来&#xff0c;RUST成为了嵌入式编程的热门语言&#xff0c;本文通过实现&#xff08;1&#xff09;LED闪灯&#xff0c;以及&#xff08;2&#xff09;在console&#xff08;终端&#xff09;实现“Hello Rust World”两项功能来完成实操的入门。 深入学习可以参考RUST语言…...

MySQL迁移SSL报错

文章记录了之前tdsql迁移IDC过程中遇到的小问题 环境 xboss业务&#xff1a; tdsql未启用SSL&#xff0c; IDC-mysql启用了SSL: 原因分析 1&#xff0c; 迁移前&#xff1a; 因为tdsql未启用ssl&#xff0c; 且应用未显式配置ssl JDBC默认使用非SSL连接&#xff0c;因此可以正…...

大模型微调与高效训练

随着预训练大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能进入了一个新的范式:预训练-微调(Pre-train, Fine-tune)。这些大模型在海量数据上学习到了通用的、强大的表示能力和世界知识。然而,要将这些通用模型应用于特定的下游任务或领域,通常还需要进行微调…...

LLM驱动的未来软件工程范式与架构策略

历史回顾与范式奠基 软件工程自其诞生以来,经历了数次里程碑式的范式变革。最初的汇编语言时代,程序员与机器指令直接对话,效率低下,代码难以复用。随后,高级语言(如Fortran、C)的出现,通过抽象层极大地提升了开发效率,并催生了面向过程的编程范式。进入20世纪末,面…...

OpenCv高阶(十六)——Fisherface人脸识别

文章目录 前言一、Fisherface人脸识别原理1. 核心思想&#xff1a;LDA与Fisher准则2. 实现步骤(1) 数据预处理(2) 计算类内散布矩阵 SW对每个类别&#xff08;每个人&#xff09;计算均值向量 μi&#xff1a;(3) 计算类间散布矩阵 SB(4) 求解投影矩阵 W(5) 降维与分类 3. Fish…...

Unity3D 异步加载材质显示问题排查

前言 在Unity3D中异步加载材质后未正确显示的问题&#xff0c;通常涉及资源加载流程、材质引用或Shader配置。以下是逐步排查和解决问题的方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; …...

【Django Serializer】一篇文章详解 Django 序列化器

第一章 Django 序列化器概述 1.1 序列化器的定义 1.1.1 序列化与反序列化的概念 1. 序列化 想象你有一个装满各种物品&#xff08;数据对象&#xff09;的大箱子&#xff08;数据库&#xff09;&#xff0c;但是你要把这些物品通过一个狭窄的管道&#xff08;网络&#xff…...

二分算法的补充说明

在上一节中我们简单介绍了二分算法&#xff0c;通过区分小于等于&#xff0c;大于或者小于&#xff0c;大于等于我们可以求出它们的边界值。 具体方法是先看一下要求哪里的边界值&#xff0c;分成两部分让如果求小于等于的右边界&#xff0c;我们根据条件让rightmid-1,leftmid…...

C++:array容器

array容器是序列容器&#xff0c;它的特点是&#xff1a;静态&#xff0c;固定数目。可以看作更安全的数组。 它还有一些成员函数&#xff0c;如begin&#xff08;&#xff09;&#xff1a;返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…...

java每日精进 5.19【Excel 导入导出】

基于 EasyExcel 实现 Excel 的读写操作&#xff0c;可用于实现最常见的 Excel 导入导出等功能。 Excel 导入导出功能涉及前后端协作&#xff0c;后端处理数据查询、文件生成和解析&#xff0c;前端提供用户交互和文件下载/上传界面。以下是全流程解析&#xff0c;分为导出流程…...

java基础(api)

包&#xff1a; 导包&#xff0c;不同包的程序名相同。 但是要用两个的话可以这样子写&#xff1a; String String概述 String的常用方法 String使用时的注意事项 String的应用案例...

CentOS7/Ubuntu SSH配置允许ROOT密码登录

CentOS7 打开SSHD配置文件 vim /etc/ssh/sshd_config 找到注释行&#xff0c;如果没有就添加。 #PermitRootLogin yes 把注释取消掉。 执行下述命令&#xff0c;重启SSHD服务即可。 systemctl restart sshd.service Ubuntu 先安装SSH服务器&#xff0c;CentOS7默认就安…...

C++ HTTP框架推荐

1. Crow 特点&#xff1a;高性能异步框架&#xff0c;支持Linux、macOS和Windows 优势&#xff1a; 轻量级&#xff1a;整个框架只有一个头文件&#xff0c;易于集成到项目中 简单易用&#xff1a;API设计简洁直观&#xff0c;学习曲线平缓 高性能&#xff1a;基于Boost.Asi…...

算法打卡第二天

5.爬楼梯(动态规划) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2…...

VSCode推出开源Github Copilot:AI编程新纪元

文章目录 开源决策的背后GitHub Copilot的演进历程Copilot Chat核心功能解析1. 聊天界面集成2. 代码理解与生成3. 多文件编辑能力4. 智能代理模式 开源后的影响与展望对开发者的影响对AI编程工具市场的影响未来发展方向 如何开始使用GitHub Copilot结语相关学习资源 在AI编程助…...

Mujoco 学习系列(四)官方模型仓库 mujoco_menagerie

mujoco 官方在 Github 上发布了一个他们自己整理的高质量的模型仓库&#xff0c;这个仓库是一个持续维护的项目&#xff0c;里面包含了目前市面上常见的人形机器人、机械臂、底盘等模型&#xff0c;对于初学者而言是一个非常好的学习资料&#xff0c;无论是想在仿真环境中尝试还…...

代码走读 Go 语言 Map 的实现

序言 在日常的开发当中&#xff0c;我们一定离不开一个数据结构字典。不仅可以存储关联数据对&#xff0c;还可以在 O(1) 的时间复杂度进行查找。很久之前在 一篇文章带你实现 哈希表 介绍了相关的原理以及简单的实现。所以这篇文章中我们就不多赘述哈希表的原理&#xff0c;而…...

PostgreSQL14 +patroni+etcd+haproxy+keepalived 集群部署指南

使用postgresql etcd patroni haproxy keepalived可以实现PG的高可用集群&#xff0c;其中&#xff0c;以postgresql做数据库&#xff0c;Patroni监控本地的PostgreSQL状态&#xff0c;并将本地PostgreSQL信息/状态写入etcd来存储集群状态&#xff0c;所以&#xff0c;patr…...

数据结构知识点汇总

1、在数据结构中&#xff0c;随机访问是指能够直接访问任一元素&#xff0c;而不需要从特定的起始位置开始&#xff0c;也不需要按顺序访问其他元素。这种访问方式通常不涉及遍历。例如&#xff0c;数组&#xff08;array&#xff09;支持随机访问&#xff0c;你可以直接通过索…...

雅思英语考试基本介绍

考试分类 雅思&#xff08;国际英语语言测试系统&#xff0c;International English Language Testing System 即IELTS&#xff09;主要分为两大类&#xff1a; 学术类&#xff08;A类&#xff09; 这是我可能会选择的一种&#xff08;✓&#xff09;&#xff0c;专为申请大学…...

基于YOLO11深度学习的变压器漏油检测系统【Python源码+Pyqt5界面+数据集+安装使用教程+训练代码】【附下载链接】

文章目录 引言软件主界面源码目录文件说明一、环境安装(1)安装python(2)安装软件所需的依赖库 二、软件核心功能介绍及效果演示(1)软件核心功能(2)软件效果演示 三、模型的训练、评估与推理(1)数据集准备与训练(2)训练结果评估(3)使用训练好的模型识别 四、完整相关文件及源码下…...

线上 Linux 环境 MySQL 磁盘 IO 高负载深度排查与性能优化实战

目录 一、线上告警 二、问题诊断 1. 系统层面排查 2. 数据库层面分析 三、参数调优 1. sync_binlog 参数优化 2. innodb_flush_log_at_trx_commit 参数调整 四、其他优化建议 1. 日志文件位置调整 2. 生产环境核心参数配置模板 3. 突发 IO 高负载应急响应方案 五、…...

【洛谷 P9025】 [CCC2021 S3] Lunch Concert 题解

题目&#xff1a; 洛谷 P9025 分析&#xff1a; 为了解决这个问题&#xff0c;我们需要找到一个整数位置 c 来举办音乐会&#xff0c;使得所有人移动到能听到音乐会的位置的时间总和最小。每个人移动后的位置应该在其听力范围内&#xff0c;并且尽可能靠近自己的初始位置以减少…...