【问题标题】:How can I get my loop to iterate through my list?如何让我的循环遍历我的列表?
【发布时间】:2019-05-24 08:25:02
【问题描述】:

我是编程和 python 的新手。我已经构建了一个循环,它使用一个图像创建一个平铺图像,并且效果很好。

for left in range(0,iWidth,(logoWidth + xOffset)):
    for top in range (0,iHeight,(logoHeight + yOffset)):
        icopyIm2.paste(logo,(left,top))

icopyIm2.save("tiled_image.png")

但是,我希望它使用一系列图像,这样每个图块都不同。在“粘贴”的参数中,“标志”变量只有一张图像。我希望循环遍历一个列表,例如:

imageList = [pic1.png, pic2.png, pic3.png, pic4.png]

我不确定如何实现这一点。

【问题讨论】:

  • icopyIm2logo有哪些类型?
  • 在您当前的循环周围添加另一个 for 循环,每次都会为您提供徽标?
  • 类型是PNG图像文件,除非我误解了。 icopyIm2 是 900x900 透明 PNG。徽标是 300x300 的图像,以 3x3 的方式平铺九次。
  • 列表中有 4 张图片。你能有超过4个瓷砖吗?应该怎么处理?
  • 这个列表只是一个例子,它可能应该是 9 张图片,你是对的。我只是不确定如何将列表项传递到我当前拥有“徽标”的参数中(在我的代码前面声明并打开)。

标签: python loops


【解决方案1】:

如 cmets 中所述,您需要弄清楚在平铺不同图像时要如何处理它们。如果您的框架是 3x3 并且您有 5 张图片,您希望它是什么样的?

我认为你的问题的核心是设置一个带参数的函数。下面的示例制作了 3 个字母单词的平铺图像,我认为这与您的问题一致。我选择只是循环遍历输入列表——没有模式。

def make_box(width, height, hits):
    hit_limit = len(hits)
    count = 0
    for i in range(height):
        for j in range(width):
            print(hits[count % hit_limit], end=' ')
            count += 1
        print()

hit_list = ['bop', 'pow', 'zap', 'bam', 'oof']
box_h = 3
box_w = 4

make_box(box_w, box_h, hit_list)

输出:

bop pow zap bam 
oof bop pow zap 
bam oof bop pow 

【讨论】:

  • 这非常有用,感谢 Jeff H,特别是关于遍历 hit_list 的部分。
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多