如下,方框内是我编写的错误代码,要求是需要编写函数来求,可是我改了好几次仍然有问题
改下函数digitSum返回值就好
def digitSum(a):
sum = 0
while a > 0:
sum += a % 10
a //= 10
return sum
a = int(input())
print(digitSum(a))
运行结果:
没有做课后题的源码的效果图:
-第二道题目做法:在createImageGrid
函数中创建 3*3像素的小黑块, 语句是:gap = Image.new('RGB', (3, 3))
,当然你想要其他的小块也可以,把语句更改为:gap = Image.new('RGB', (3, 3),(255, 255, 255))
(这就是小白块了),输入自己想要的R、G、B值,就可以随心所欲更改渐变颜色了。当粘贴替换图片小块后,继续贴小黑块语句是:grid_img.paste(gap, (col * width , row * height ))
,就产生了想要的效果。
小白块效果图:
源代码:
"""
打开图像,分割图像,将分割好的小块粘贴(可以只要原来的四分之一,来降低像素),保存。
"""
import os
from PIL import Image
#图像路径
target_image1 = '.\\test-data\\专属.jpg'
#分割图形
def splitImage(image, size):
"""
将图像按照网格分成多个小图像
@param {Image} image Pil Image
@return {List[Image]} 小图像列表
"""
#image = Image.open(target_image)
#获得原始图像尺寸
W, H = image.size[0], image.size[1]
# print(image.size)
# print(size[1])
#分划的小图像个数 m * n
m, n = size
#小图像的尺寸
w, h = int(W / n), int(H / m)
#分割好的小图像放在列表中
imgs = []
#遍历
for j in range(m):
for i in range(n):
#得到小图像并加入到imgs列表
imgs.append(image.crop((2 * i * w, 2 * j *h, (2 * i + 1) * w, (2 * j + 1) * h)))
return imgs
#粘贴图像
def createImageGrid(images, dims):
"""
将图形列表里的小图像按先行后列的顺序拼接为一个大图像
@param {List[Image]} images 小图像列表
@param {Tuple[int, int]} dims 大图像的行数和列数
@return Image 拼接得到的大图像
"""
m, n = dims
# #确保小图像个数满足要求
# assert m *n == len(images)
#计算小图像的最大尺寸
width = max([img.size[0] for img in images])
height = max([img.size[1] for img in images])
#创建大图像对象
grid_img = Image.new('RGB', (int(n * width / 2), int(m * height / 2 )))
#将小图像粘贴到大图像
for index in range(len(images)):
#计算要粘贴到的行
row = int(index / n)
#计算粘贴到的列
col = index - n * row
#粘贴
grid_img.paste(images[index], (col * width, row * height))
return grid_img
def main():
#打开图形
target_image = Image.open(target_image1)
#分割图形
target_images =splitImage(target_image,[128, 128])
#粘贴新图形
mosaic_image = createImageGrid(target_images, [128, 128])
#保存
output_filename = 'mosaic1.png'
#mosaic_image.save(output_filename)
mosaic_image.save('D:\python项目\\照片马赛克\\masaka1.png')
if __name__ == '__main__':
main()
原图:
块状处理后效果:
我可以为您提供一个计算Python整数的数位和的函数解决方案。可以使用while循环和取模运算来实现该功能。以下是示例代码:
def digit_sum(n):
total = 0
while n > 0:
total += n % 10
n //= 10
return total
在这个函数中,我们对n进行while循环,每次取模10,将余数加到总和里面,并将n除以10(去掉个位数字)。当n变为0时,说明所有数字都被处理完毕,我们将总和返回即可。
您可以使用以下代码来测试该函数:
print(digit_sum(1234))
输出将是:10
如果您仍然遇到问题,请告诉我具体错误信息,我将尽力协助您解决。