【每周一坑】数路径
代码方面的问题,欢迎大家在论坛上发帖讨论(有问必回):bbs.crossincode.com
最近有同学表示在找工作面试时遇到了在我们【每周一坑】栏目中做过的题目,于是轻松搞定。所以说嘛,功夫不负有心人,多写代码绝对是有好处滴 :)
本周的问题和寻路有关:
现有一个 m × n (m,n 都小于 100)的网格,位于左上角的 A 要去寻找右下角的 B,A 只能向下或者向右行走,现在问题来了,按照刚才的规则,A 到达 B 一共有多少种不重复的路径?
def uniquePath(m, n): ''' :type m: int :type n: int :rtype: int ''' # your code here
assert uniquePath(1, 2) == 1
assert uniquePath(3, 3) == 6
assert uniquePath(10, 20) == 6906900
期待各位同学提交解答。
提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【解答】缩小图片尺寸
上周的题目,核心的代码在于图片的处理,这个通过 python 的 PIL(Python Imaging Library)库的 resize()
方法即可实现。
注意:这个库是要另行安装的,如果你装过 anaconda,那直接就包含了。否则的话,你需要通过安装 Pillow 来获得 PIL 的功能:
pip install pillow
核心代码
import os
from PIL import Image
def process(addrs, dest, ratio, delete): # addrs 为所有待处理的图片地址 类型为 list # dest 为某个文件夹路径 类型为 str # ratio 为缩小比例, 类型为 float # delete 为是否删除原文件标记, 类型为 bool for file in addrs:
# 缩小图片并保存 im = Image.open(file) adjusted_size = tuple([int(i*ratio) for i in im.size]) new = im.resize(adjusted_size) name = file.split('/')[-1] file_path = os.path.join(dest, name)
# 查看目的文件夹是否已经存在该文件 # 存在则在文件名前添加 _ while os.path.exists(file_path): name = '_' + name file_path = os.path.join(dest, name) new.save(file_path) print('文件 {0} 经处理后保存为 {1}'.format(file, name)) # 是否删除 if delete:
for file in addrs: os.remove(file) print('原文件已经删除')
关于目录及文件的处理,可以通过 os.walk()
来实现,命令行参数则可借助 argparse
模块。具体代码这里不赘述,可以在此查看:
https://gitee.com/zx576/Crossin-practices/blob/master/python_weekly_question/shrinkimg/shrink.py
完成该题目的同学有四位:
@王任 同学的代码逻辑较完整,不仅考虑了正常的情况,也考虑了异常处理:https://paste.ubuntu.com/25589912/
其他完成题目的同学还有:
@热风 同学:https://github.com/SumOfMinterm/PythonProjects-ImageProcessing/blob/master/resizeByArgs.py
@古美萌 同学: https://coding.net/u/komikado/p/crossinweek/git/blob/master/img.py
@Seerz 同学:https://paste.ubuntu.com/25513336/
感谢大家的参与!