对于 Python 中的循环,但步长为 "n"
For cycle in Python, but with a step of "n"
我正在编写一个 python 程序,它读取图像每个像素的颜色,然后用 ASCII 字符创建一个与该像素亮度相似的文件(使用原始点像素是暗的,如果是亮的则显示“#”)。我意识到 ASCII 字符比单个像素大得多:生成的 ASCII 艺术作品太大而无法在普通显示器上显示。
现在我想尝试应用这个过程,每 10 个像素只计算一个。我应该怎么做?如何设置我的for循环的步骤!=1(默认值)?
您可以使用 range
的三参数形式:
for i in range(0, width, 10):
for j in range(0, height, 10):
...
尽管仅采样 1% 的像素很可能会产生非常糟糕的结果。例如,您可以通过使每个输出字符取决于每个 10x10 像素块的平均值来改进它。
实际上,range()
需要3个位置参数,其中2个默认设置为0和1。参数是:start
=从哪个数字开始,stop
= 停止的数字和 step
= 每次增加计数的数字。默认情况下,start
等于 0,step
等于 1。当您编写 range(number)
时,您将停止分配给您的号码。所以,如果我想要每 10 个数字,我只需要写:
range(0, 100, 10)
另一个解决方案显然是
for mul in range(width//10):
do_thing(mul*10)
我正在编写一个 python 程序,它读取图像每个像素的颜色,然后用 ASCII 字符创建一个与该像素亮度相似的文件(使用原始点像素是暗的,如果是亮的则显示“#”)。我意识到 ASCII 字符比单个像素大得多:生成的 ASCII 艺术作品太大而无法在普通显示器上显示。
现在我想尝试应用这个过程,每 10 个像素只计算一个。我应该怎么做?如何设置我的for循环的步骤!=1(默认值)?
您可以使用 range
的三参数形式:
for i in range(0, width, 10):
for j in range(0, height, 10):
...
尽管仅采样 1% 的像素很可能会产生非常糟糕的结果。例如,您可以通过使每个输出字符取决于每个 10x10 像素块的平均值来改进它。
实际上,range()
需要3个位置参数,其中2个默认设置为0和1。参数是:start
=从哪个数字开始,stop
= 停止的数字和 step
= 每次增加计数的数字。默认情况下,start
等于 0,step
等于 1。当您编写 range(number)
时,您将停止分配给您的号码。所以,如果我想要每 10 个数字,我只需要写:
range(0, 100, 10)
另一个解决方案显然是
for mul in range(width//10):
do_thing(mul*10)