《我的世界》Python编程入门(10)模块与“挖宝藏”游戏

article/2025/7/25 21:07:42

一、模块概述

1.1 模块

模块是Python组织、封装代码的一种形式。在Python中,一个.py文件就称之为一个模块(Module)
创建模块的优点:

  • 大大提高了代码的可维护性。
  • 便于复用代码。
  • 避免函数名和变量名冲突。

创建模块的注意事项:

  • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
  • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

1.2 包

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下树形结构图组织文件和文件夹存放:

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。
请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany。
类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

mycompany├─ web│  ├─ __init__.py│  ├─ utils.py│  └─ www.py├─ __init__.py├─ abc.py└─ utils.py

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utils和mycompany.web.utils。

二、使用模块

2.1 import语句

2.1.1 import语句的三种形式

import语句用于导入模块,它有3种形式
(1)导入模块
格式:import 模块1,模块2
多个模块名之间用逗号隔开
例如:import sys,time
(2)导入模块中的某个变量、函数、类定义
格式:from 模块 import 定义
例如:

>>> import sys,time
>>> from sys import path
>>> path
['', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\Administrator\\AppData\\Roaming\\Python\\Python37\\site-packages', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

(3)直接导入模块中的所有定义
格式:from 模块 import *

例如:from sys import *

>>> from sys import *
>>> version
'3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)]'

2.2 as关键字

作用:用于给模块或模块中的定义起别名
例如:

>>> from sys import version as v
>>> v
'3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)]'

三、模块实例

回忆下前面学习中用到的导入语句

import mcpi.minecraft as minecraft
import mcpi.block as block
import time

这三个语句都是导入模块的语句,每个模块就是一个.py文件,那么这些.py在什么位置呢?

3.1 mcpi.minecraft和mcpi.block

请打开mcpi目录
在这里插入图片描述

打开minecraft.py文件,看看里面有没有熟悉的某些方法(函数)?
打开block.py文件,看看里面有没有熟悉的某些变量?
模块中复用的主体就是这些函数和变量!包、模块只是一种组织形式。

3.2 模块搜索方式

当我们导入一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:

>>> import mymodule
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ImportError: No module named mymodule

默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块。
这也是我们要求编写的程序文件必须保存在MyAdventures目录的原因,因为只有这样,程序才能正常导入“我的世界”相关的模块。

四、标准库和random模块

4.1 标准库

Python安装时自带的模块叫做标准库(standard library)。
库(library)是相关模块、包的集合,是一个虚拟概念。
标准库中的内置模块,可直接用import语句导入。
在windows的Python安装目录中,lib目录中存放着绝大多数标准库和已安装的第三方库,其中第三方库在lib目录的site-packages子目录中。

4.2 random模块

内置模块random用于生成随机数。
random模块包含多个用于生成随机数的函数。

案例1:随机模块功能演示

import random#random函数用于生成一个0-1之间的随机浮点数
print(random.random())#randint() 用于生成一个指定范围内的随机整数
print(random.randint(2,10))#uniform() 用于生成一个指定范围内的随机浮点数
print(random.uniform(2,10))#randrange函数用于随机从某个区间按某步长选择一个数字。
#第1个参数起始值,第2个参数终止值,第3个参数步长
print(random.randrange(0,1000,3))#sample函数可以从序列中随机选择若干个元素,返回数据类型为列表。
print(random.sample(range(100), 4))#choice函数能够从序列中随机选择一个元素输出。
print(random.choice("abcdefg"))

多次执行该案例,对比结果可知,每次执行结果都不同
请分析下不同结果之间的规律!

五、案例:随机生成石块

在这里插入图片描述

代码实现

import random
#导入模块
import mcpi.minecraft as minecraft
import mcpi.block as block# 连接游戏
mc = minecraft.Minecraft.create()
# 获取玩家当前坐标
pos = mc.player.getTilePos()
x = pos.x 
y = pos.y
z = pos.z#循环20次,用于输出20个随机的石块
for i in range(20):#随机生成两个整数j = random.randint(0,20)k = random.randint(0,20)#用两个随机数构造坐标,在东南方向随机生成石块mc.setBlock(x + j, y , z + k, block.STONE.id)

六、案例:“挖宝藏”

在这里插入图片描述

代码实现

import random
import time
#导入相关模块
import mcpi.minecraft as minecraft
import mcpi.block as block# 连接游戏
mc = minecraft.Minecraft.create()
# 获取玩家当前坐标
pos1 = mc.player.getTilePos()
# 获取一个随机整数
R = random.randint(1,10)
# 在玩家东南方随机放置一个钻石方块
mc.setBlock(pos1.x + R, pos1.y - 1 , pos1.z + R, block.DIAMOND_BLOCK.id)while True:#每隔0.1秒检测一次玩家坐标pos = mc.player.getTilePos()time.sleep(0.1)#当玩家找到钻石方块时退出循环if pos.y-1 == pos1.y-1 and pos.x == pos1.x+R and pos.z == pos1.z+R:mc.postToChat("here")breakelif pos.y-1 != pos1.y-1 or pos.x != pos1.x+R or pos.z != pos1.z+R:mc.postToChat("not here")

小结
模块:一个py文件就是一个模块
包:含__init__.py文件的目录层次结构
导入语句:注意三种不同语句的作用
random库:伪随机数生成器


http://chatgpt.dhexx.cn/article/MaF1X5Z9.shtml

相关文章

2021年9月世界编程语言排行

2021 年 9 月的 TIOBE 指数 9 月头条&#xff1a; Python 即将接管榜首位置 关注TIOBE好几个月了&#xff0c;看着python一步一步往上靠&#xff0c;居然要超过&#xff23;&#xff0c;麻了&#xff01; Python 从未如此接近 TIOBE 指数的头号位置。它只需要上升 0.16% 就能…

查看世界编程语言排行榜

作为一个小菜鸡&#xff0c;之前从来没关注过这些内容&#xff0c;也不知道在哪可以查看编程语言排行榜&#xff0c;所以记录一下&#xff0c;关注一下编程语言的形势&#xff0c;学一下当前比较火的语言&#xff0c;也是挺酷的一件事情&#xff0c;当然将来也会是自己简历上的…

计算机编程语言排行榜—TIOBE世界编程语言排行榜(2021年11月份最新版)

内容导航&#xff1a; 1、TIOBE排行榜2、总榜&#xff08;2021年11月份&#xff09;3、本月前三名 3.1、Python3.2、C3.3、Java 4、学习路线图5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量&#xff0c;并使用搜索引擎…

在我的世界中用 python 编程

1.下载我的世界 1.12.2&#xff0c;并运行。 百度 我的世界 1.12.2 不要网易版要mojang版 下载 纯净版安装文件 解压到某个目录例如 e:\mc1.12.2 完成后如下。 下载启动器 https://ci.to2mbn.org/job/HMCL/ 放到刚才解压的目录下 安装jdk1.8 http://www.oracle.com/techne…

世界编程语言排行榜第一是Python【Python为什么那么火】

这是2021年底tiobe编程语言排行榜数据 可以看到Python在一个月的时间冲到了第一 Python为什么那么火&#xff0c;它到底值不值得大家学习呢&#xff1f; 首先&#xff0c;我们可以从市场上分析&#xff0c;满大街都是Python。 我们平时刷视频&#xff0c;刷博客&#xff0c;刷…

python之我的世界编程mcpi(2)获取坐标

Minecraft坐标系 Minecraft游戏是属于一款3D游戏&#xff0c;那么在游戏中确认位置&#xff0c;需要用到X&#xff0c;Y&#xff0c;Z 三轴坐标 x是东西方向&#xff1b; z是南北方向&#xff1b; y是表示高低程序 mc.player.getTilePos() 用来获取当前角色的位置信息 返回结果…

实时更新:TIOBE世界编程语言排行榜(2021年11月份)

内容导航&#xff1a; 1、TIOBE排行榜2、总榜&#xff08;2021年11月份&#xff09;3、本月前三名 3.1、Python3.2、C3.3、Java 4、学习路线图5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量&#xff0c;并使用搜索引擎…

《我的世界》Python编程入门(2)Minecraft(我的世界) 游戏简介

游戏简介 我的世界&#xff08;Minecraft&#xff09;是一款沙盒建造游戏&#xff0c;于2009年5月17日发行&#xff0c;由瑞典游戏设计师马库斯阿列克谢泊松开创&#xff0c;现由Mojang Studios维护&#xff0c;2014年11月&#xff0c;微软(Microsoft)斥资25亿美元收购了Mojan…

Python超越Java语言,跃居世界编程语言第2位了!你却还在犹豫学不学Python?

一、前言 C、Java、Python作为常据世界编程语言排行榜前三甲的语言&#xff0c;必然有其得天独厚的优势。以下是2021年5月最新的高级编程语言排行榜&#xff0c;可以看到&#xff0c;Python已经超越Java语言跃居世界第二位&#xff0c;为什么Python越来越受欢迎了呢&#xff1…

python之我的世界编程mcpi(1)环境安装

使用python代码进行操控《我的世界》 1.相应文件下载 链接&#xff1a;https://pan.baidu.com/s/1OZsiaQiA4Mv3dp2ui59WAQ?pwd6666 提取码&#xff1a;6666 javaJDK&#xff1a;win32 / win64 Minecraft&#xff1a;我的世界启动侠 SpigotServer1.9.2&#xff1a;游戏服务器…

教你用 Python 自制简单版《我的世界》

《我的世界 Minecraft》大家应该都听说过&#xff0c;但你有没有想过自己写一个这样的游戏呢&#xff1f;太难、太复杂了&#xff1f;也许吧&#xff0c;但是不试一试你怎么知道能不能成呢&#xff1f; 国外有位叫fogleman的开发者就用Python做了这样的一件事——自制《我的世…

《我的世界》Python编程入门(8)建造房屋

一、字典 首先&#xff0c;复习下前面学习的一些Python内置数据类型&#xff1a; 字符串在表示上有什么特点&#xff1f;数字呢&#xff1f; Python内置的数据类型主要有&#xff1a;数字、字符串、列表、元组、字典。 1.1 字典的基本概念 字典&#xff08;dict或者dictiona…

DEM数字高程数据之高程网格格式转换

上一篇文章介绍了DEM数字高程数据的下载及matlab处理,这篇介绍制作固定大小的高程网格格式数据。 高程网格格式数据即为点云数据,后缀名为.xyz。在有些场合需要固定大小的高程网格格式数据,100100或者200200的,在地理空间数据云上下载的DEM数据往往数据量很大,不符合诗句需…

ASTER GDEM v3.0高程数据批量下载

目录 1.写在前面 2.数据集简介 3.数据下载 少量数据下载 大量数据下载 1.写在前面 ASTER GDEM v3.0数据下载网址需要魔法&#xff0c;另外推荐使用谷歌浏览器&#xff0c;方便后续使用插件。 下载是免费的&#xff0c;但是要有urs.earthdata.nasa.gov的账号&#xff0c;…

ENVI将高程数据拼接并转换为.dem或.dat_bil格式——以GDEM数据为例

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、导入tif文件二、拼接生成.dat三、.dat转换为.dat_bil与DEM四、与DEM相关的其他格式转换 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xf…

数据禾|全国10米DEM数字高程数据

区 域&#xff1a; 中国 尺 度&#xff1a; 10米 格 式&#xff1a; 栅格 时 间&#xff1a; 2018年 时 相&#xff1a; 年 数字高程模型&#xff08;Digital Elevation Model)&#xff0c;简称DEM&#xff0c;是通过有限的地形高程数据实现对地面地形的数字化模拟&#xff0…

DLR、ASTER GDEM、SRTM、GMTED2010等高程数据简介

数据简介摘自博文[http://blog.sina.com.cn/s/blog_720f853f01014hub.html] 但由于原文时间较久&#xff0c;所提供的网址几乎也都需要翻墙&#xff0c;就本人所了解&#xff0c;部分可在地理空间数据云[http://www.gscloud.cn/]下载 常见DEM数据&#xff1a; 1.DLR之SRTM X…

DEM高程数据的获取、合并与坐标转换

DEM高程数据的获取、合并与坐标转换 一、DEM数据的获取二、数据合并三、投影转换方法一四、投影转换方法二 今天用DEM数据做了一个坡度分析&#xff0c;数据使用过程中涉及到投影坐标转换&#xff0c;由于不是很熟悉所以费了一番功夫。经过一番折腾总结出两个方法&#xff0c;方…

OSG加载DEM高程数据

本文采用编辑earth文件的方式加载DEM高程数据 test.earth文件描述 <map version"2"><image driver"xyz" enabled"true" name"gaode_sat-1" profile"global-mercator" url"http://webst0[1234].is.autonavi…

ArcGIS DEM数字高程模型数据的生成

1、基本分析方法 GIS做地形分析的基本步骤其实是非常简单的&#xff0c;网上也有非常多的教程进行阐述&#xff0c;其实大家按这个步骤也基本能做出来&#xff0c;但问题就出现在每个人所使用的基础数据都多多少少有不同的问题&#xff0c;因此在操作过程中就不同程度的受阻&a…