Python整数数位和怎么用函数来求

如下,方框内是我编写的错误代码,要求是需要编写函数来求,可是我改了好几次仍然有问题

img


这是错误代码运行的结果

img

改下函数digitSum返回值就好

def digitSum(a):
    sum = 0
    while a > 0:
        sum += a % 10
        a //= 10
    return sum


a = int(input())
print(digitSum(a))

运行结果:

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7533891
  • 这篇博客你也可以参考下:python爬虫如何实现对大文件的爬取,以及在爬取过程中对暂停爬取,继续爬取,取消爬取等系列功能的实现!
  • 同时,你还可以查看手册:python- 走向编程的第一步 中的内容
  • 除此之外, 这篇博客: 使用 Python 创建照片马赛克(实验楼实验),源代码已经包含课后作业。中的 这部分源码包含了第二道练习题,所以图片效果是每个小图片之间都有黑色的小块。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
  • 原图效果:
    • 在这里插入图片描述

    没有做课后题的源码的效果图:
    在这里插入图片描述

    -第二道题目做法:在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从入门到实战 基础入门视频教程(讲解超细致)课程中的 九九乘法表作业小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以为您提供一个计算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

    如果您仍然遇到问题,请告诉我具体错误信息,我将尽力协助您解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^