【问题标题】:For cycle in Python, but with a step of "n" [duplicate]Python中的循环,但步长为“n”[重复]
【发布时间】:2020-07-27 04:20:15
【问题描述】:

我正在编写一个 python 程序,它读取图像每个像素的颜色,然后使用具有相似亮度的 ASCII 字符创建一个文件(使用原始像素的一个点是暗的,并且“#”如果是亮的)。我意识到 ASCII 字符比单个像素大得多:生成的 ASCII 艺术作品太大而无法在普通显示器上显示。

现在我想尝试应用这个过程,每 10 个像素中只计算一个。我该怎么做?如何设置我的for循环的步长!=1(默认值)?

【问题讨论】:

  • 像素是如何表示的?如果您可以通过索引获取它们并且您知道完整长度,则可以使用range(0, some_len, 10) 以 10 秒为单位进行索引,也许每个间隔的平均像素为 0-9。

标签: python ascii ascii-art


【解决方案1】:

其实range()有3个位置参数,其中2个设置为默认0和1。参数是:start=从哪个数字开始,stop=在哪个数字停止, step = 每次增加计数的数量。默认情况下,start 等于 0,step 等于 1。当您编写 range(number) 时,您将停止分配给您的号码。所以,如果我想要每 10 个数字,我就写:

range(0, 100, 10)

【讨论】:

    【解决方案2】:

    您可以为此使用range 的三参数形式:

    for i in range(0, width, 10):
        for j in range(0, height, 10):
            ...
    

    尽管仅对 1% 的像素进行采样很可能会产生非常糟糕的结果。例如,您可以通过使每个输出字符取决于每个 10x10 像素块的平均值来改进它。

    【讨论】:

    • 我迟到了 1 分钟...
    【解决方案3】:

    显然另一种解决方案

    for mul in range(width//10):
       do_thing(mul*10)
    

    【讨论】:

    • 为什么要除以 10,如果在使用时我们再次乘以 10?
    • 想要这样做的一个常见原因是,例如将整数拆分为分数;你不能做range(0,1,0.1),但你可以做range(10)并除以10。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2018-08-10
    • 2018-09-18
    • 2012-10-03
    • 2013-04-19
    相关资源
    最近更新 更多