如何在列表完成计数后操作列表进行倒计时?
问题描述:
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
import time
pos = mc.player.getTilePos()
x = pos.x + 1
y = pos.y
z = pos.z
# Add 10 glass blocks (ID 20) to this empty list
blocks = [20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
barBlock = 22 # Lapis lazuli
count = 0
while count <= len(blocks): # len (the number of items) of an object
mc.setBlock(x, y, z, blocks[0])
mc.setBlock(x, y + 1, z, blocks[1])
mc.setBlock(x, y + 2, z, blocks[2])
mc.setBlock(x, y + 3, z, blocks[3])
mc.setBlock(x, y + 4, z, blocks[4])
mc.setBlock(x, y + 5, z, blocks[5])
mc.setBlock(x, y + 6, z, blocks[6])
mc.setBlock(x, y + 7, z, blocks[7])
mc.setBlock(x, y + 8, z, blocks[8])
mc.setBlock(x, y + 9, z, blocks[9])
count += 1
# Delete the last block in the list
del blocks[9]
# Insert a lapis lazuli block at the first position in the list
blocks.insert(0, barBlock)
time.sleep(.5)
该代码将十个玻璃立方体(下面的图片1)堆叠起来,然后立方体用蓝色(barBlock)填充以给出进度条(下面的图片2)的外观。进度条只会向上计数,并在满时停止。此代码运行得非常好。我现在想要做的是编写代码,说'一旦进度条填满,使进度条向相反的方向倒数。请帮帮我。如何在列表完成计数后操作列表进行倒计时?
这段代码是关于操纵列表的。我试过用block.append(barBlock)
添加一个项目。我试过用block.insert(9, barBlock)
插入一个项目。我尝试使用del block[9]
删除一个项目。我试过使用block[9] = barBlock
更改列表项。让我说清楚。我迄今为止的代码是正确的。我知道这一点,因为我正在阅读一本书,他们给出的意见作为提示,我已经做到了这一点。现在,他们添加了这个额外的目标,即在相反的方向上倒数进度条。所以,解决办法是增加一点点代码,这就是你进来的地方。请帮助我。先谢谢你。
答
我想通了。这是完整的代码。去我!
从mcpi.minecraft进口的Minecraft MC = Minecraft.create()
进口时间
pos = mc.player.getTilePos()
x = pos.x + 1
y = pos.y
z = pos.z
# Add 10 glass blocks (ID 20) to this empty list
blocks = [20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
barBlock = [22, 22, 22, 22, 22, 22, 22, 22, 22, 22] # Lapis lazuli
glass = 20 # glass
count = 0
while count <= len(blocks): # len (the number of items) of an object
mc.setBlock(x, y, z, blocks[0])
mc.setBlock(x, y + 1, z, blocks[1])
mc.setBlock(x, y + 2, z, blocks[2])
mc.setBlock(x, y + 3, z, blocks[3])
mc.setBlock(x, y + 4, z, blocks[4])
mc.setBlock(x, y + 5, z, blocks[5])
mc.setBlock(x, y + 6, z, blocks[6])
mc.setBlock(x, y + 7, z, blocks[7])
mc.setBlock(x, y + 8, z, blocks[8])
mc.setBlock(x, y + 9, z, blocks[9])
count += 1
# Delete the last block in the list
del blocks[9]
# Insert a lapis lazuli block at the first position in the list
blocks.insert(0, barBlock)
time.sleep(.2)
count = 10
while count >= 0:
mc.setBlock(x, y + 9, z, blocks[0])
mc.setBlock(x, y + 8, z, blocks[1])
mc.setBlock(x, y + 7, z, blocks[2])
mc.setBlock(x, y + 6, z, blocks[3])
mc.setBlock(x, y + 5, z, blocks[4])
mc.setBlock(x, y + 4, z, blocks[5])
mc.setBlock(x, y + 3, z, blocks[6])
mc.setBlock(x, y + 2, z, blocks[7])
mc.setBlock(x, y + 1, z, blocks[8])
mc.setBlock(x, y, z, blocks[9])
count -= 1
blocks.insert(0, glass)
time.sleep(.2)
print("Is this code being reached")
答
这仅仅是一个清理你的代码的版本:
from mcpi.minecraft import Minecraft
import time
mc = Minecraft.create()
pos = mc.player.getTilePos()
x = pos.x + 1
y = pos.y
z = pos.z
def stack(delay, block, direction):
for count in range(10) if direction == 1 else range(9, -1, -1):
print(count)
mc.setBlock(x, y + count, z, block)
time.sleep(delay)
stack(0, 20, 1)
stack(0.5, 22, 1)
stack(0.5, 20, -1)
你意思就像'while count> 0:...; count - = 1'? – chepner
我不太清楚我理解你的问题,但也许可以参考https://*.com/questions/869885/loop-backwards-using-indices-in-python或https://*.com/questions/3476732 /如何对循环向后的 - 蟒蛇。我认为你正在寻找的是一个递减循环。 – Gaboik1