一、字典
首先,复习下前面学习的一些Python内置数据类型:
字符串在表示上有什么特点?数字呢?
Python内置的数据类型主要有:数字、字符串、列表、元组、字典。
1.1 字典的基本概念
字典(dict或者dictionaries)是一种可变(mutable)集合(collections)
,可以存储各种类型的数据
。
集合
说明这种数据类型由多个元素构成
。
可变
指的是元素可增删改
。
字典用{ }
表示开始和结束,字典的元素(item或element)为键:值对(key:value)
,键值用:
分隔,元素用 ,
分隔。
案例1:
d={'a':1,'b':2,'c':3}
#为具有3个元素的字典,
print(type(d))
结果为<class 'dict'>
b={}
#b为空字典
1.2 字典的基本特性
元素的键必须在字典中是唯一的!
元素的键和值具有一一对应关系!
案例2:
a={'a':1,'a':2}
print(a)
结果为{'a': 2}
#'a':1被覆盖掉了
字典的这两个基本特性可以用于搜索或去重。(想想新华字典是不是可以通过拼音或者偏旁部首快速查到对应的字)
1.3 字典元素的基本操作
1.3.1 新增或修改元素
格式:字典[键]=新值
注意:如果原字典中没有对应的键则为新增元素,若已存在该键则为修改元素
案例3:
a={'a':1}
a['a']=2
print(a)
#结果为{'a': 2}
a['a1']=2
print(a)
#结果为{'a': 2, 'a1': 2}
1.3.2 访问字典元素
字典元素访问的核心为按元素的键访问,得到的是对应的值。
格式:字典[键]
注意:若键不存在,则会报错!
案例4:
a={'a':1}
print(a['a'])
#结果为1
print(a['b'])
#结果为
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
1.3.3 删除元素
格式:del 字典[键]
注意:如果被删除的元素不存在,则会报错。
案例5:
a={'a':1}
del a['a']
print(a)
#结果为{}
del a['a']
#结果为
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
二、案例:建造房子
2.1 空气方块
block.AIR.id
可以把方块设置为空气,即清除掉对应区域
2.2 setBlocks()方法
作用:将一个3D区域内的所有方块设置为一种相同的方法。
参数:7个,前6个为2组坐标,即3D区域的对角线端点坐标,最后一个参数为方块类型。
案例6:创建立方体
import mcpi.minecraft as minecraft
import mcpi.block as block
mc = minecraft.Minecraft.create()
pos = mc.player.getTilePos()
mc.setBlocks(pos.x+2, pos.y, pos.z, pos.x+12, pos.y+10,
pos.z+10, block.DIAMOND_BLOCK.id)
2.3 综合案例:建造房子
房屋要求:
案例分析
先建造一个立方体,再掏空立方体,只留下表面。
得到x轴与y轴最中间的坐标点
根据设计图规划房子
石头:COBBLESTONE
空气:AIR
玻璃:GLASS
木材:WOOD
羊毛:WOOL
案例参考效果
案例代码
import mcpi.minecraft as minecraft
import mcpi.block as block
#先导入所需模块,然后连接游戏
mc = minecraft.Minecraft.create()
#size表示所建房屋的大小,改变size可以改变房子的大小
size = 20
#获取玩家所在坐标点
pos = mc.player.getTilePos()
x=pos.x
y=pos.y
z=pos.z
#midx、midy为正面方向房子在x、y轴上的中间点,便于计算窗户和门的坐标
#如果房子大小改变,窗户、门的位置也会随之变化
midx = x + size/2
midy = y + size/2
#根据size建造一个实心立方体
mc.setBlocks(x, y, z, x+size, y+size, z+size, block.COBBLESTONE.id)
#将立方体的内部掏空
mc.setBlocks(x+1, y, z+1, x+size-1, y+size-1, z+size-1, block.AIR.id)
#实现门,midx代表了x轴坐标的中间位置
mc.setBlocks(midx-1, y, z, midx+1, y+3, z, block.AIR.id)
#填充玻璃窗户
mc.setBlocks(x+3, y+size-3, z, midx-3, midy+3, z, block.GLASS.id)
mc.setBlocks(midx+3, y+size-3, z, x+size-3, midy+3, z, block.GLASS.id)
#使用木材方块建造一个屋顶
mc.setBlocks(x, y+size, z, x+size, y+size, z+size, block.WOOD.id)
#在房子内增加一个羊毛地毯
mc.setBlocks(x+1, y-1, z+1, x+size-1, y-1, z+size-1, block.WOOL.id)
本课重难点
- 字典的基本概念
- 空气方块和setBlocks方法的使用
- 如何结合案例计算坐标点