![Python自动化运维快速入门](https://wfqqreader-1252317822.image.myqcloud.com/cover/815/26846815/b_26846815.jpg)
1.6 多个例子实战Python编程
本节通过几个实用的例子来复习Python语法。
1.6.1 实战1:九九乘法表
本例技术点:打印小学乘法口诀表(练习for循环、字符串格式化)。
我们看到的九九乘法口诀表一般如图1.33所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P61_10663.jpg?sign=1738798001-7XFsgxUoRAMjTfEkYkl4457hc0nsjD0z-0-7ac81e490be6515b91efbfa73833e3ca)
图1.33 九九乘法口诀表
第一步:定义乘数x,即每一行中不变的那个数;定义被乘数y,即每一行的乘以乘数x,依次递增1,但不超过x的数。
第二步:print被乘数、乘数、积的相关信息,当乘数增加1时,输出一个换行。
第三步:格式化输出最大长度为6的字符串,右补空格,以显示整齐。
代码如下(example_99.py):
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P61_46758.jpg?sign=1738798001-dTuGLs54iesoqjgSuAhoFL1hPHmtvkCi-0-cdf0f50919f3a79a7b64752522e3076e)
保存为99.py,在命令窗口输入python example_99.py,运行结果如图1.34所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P61_10705.jpg?sign=1738798001-L2VcfriQd7MEM8yIE8obFSuMafjGOrBx-0-6c945f336e521911b86b0a5f9dd1b1ac)
图1.34 运行结果
1.6.2 实战2:发放奖金的梯度
企业发放的奖金根据利润提成,利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元低于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;20万元到40万元之间时,高于20万元的部分可提成5%;40万元到60万元之间时,高于40万元的部分可提成3%;60万元到100万元之间时,高于60万元的部分可提成1.5%;高于100万元时,超过100万元的部分按1%提成。计算给定的利润I,应发奖金总数。
本例技术点:利用数组(列表)来分界和定位。
代码如下(reward_demo.py):
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P62_46759.jpg?sign=1738798001-6A81f12pMorN31k8h3ZDF5YBNraAIvFR-0-6ae5675ac81d975974957b8b5947b497)
执行python reward_demo.py依次输入利润数据,结果如图1.35所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P62_10873.jpg?sign=1738798001-vdt6ChbhbEE6lkWgCp5iTVuX1UmitW1F-0-d376c6f3ad44040b42bbaab224872574)
图1.35 运行结果
通过本例,我们可以练习Python的输入输出、列表的运用、continue的作用、列表推导式等。
1.6.3 实战3:递归获取目录下文件的修改时间
列出某一文件目录下的所有文件(包括其子目录文件),打印修改时间,距当前时间有几天几时几分。
本例技术点:使用标准库os模块的os.walk方法,使用datetime模拟计算时间差。
代码如下:
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P63_46760.jpg?sign=1738798001-H5VoCqQK42Fp9mAgtjTlJlpZFr9IiT8q-0-fd493666b2bccc3d47566210be1e1b4f)
将上述代码保存为example_fileModifiedTime.py,在命令窗口执行python example_fileModifiedTime.py,运行结果如图1.36所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P63_11069.jpg?sign=1738798001-8nvVZYO6pIGlaTtnBFvcm68uVCqYU2tu-0-bcb44a6d0f9d38372fee75c0cf8638fc)
图1.36 运行结果
本例稍做修改可以用于运维自动删除N天前的文件,读者可自行实践。
1.6.4 实战4:两行代码查找替换3或5的倍数
列出1~20的数字,若是3的倍数就用apple代替,若是5的倍数就用orange代替,若既是3的倍数又是5的倍数,就用appleorange代替。注意,只能使用两行代码。
本例技术点:若是一般的思路,则肯定是一个for循环,再加上if else等操作。本例的目的是练习使用字符串的切片操作,代码及运行结果如图1.37所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P64_11085.jpg?sign=1738798001-XRCT7uLxTuHiRdLGKUNKsy99eWWcM4dq-0-ee63d610ceee77d4e26d46b58cacfd9a)
图1.37 两行代码实现
其实算法很简单,就是i对3和5取余,如果为0,则从下标0*5=0开始切片,就取到了apple;如果余数不为0,则最小是从下标1*5=5开始切片,就取到字符串为空。即“apple”[5:]的结果为空。最后使用了or关键字,print(A or B)的含义:如果A为True,则结果为True;当A是False再判断B,如果B是True,则结果是True。
1.6.5 实战5:一行代码的实现
本例要求使用一行代码就实现实例4的运行结果。
本例技术点:学习使用列表推导式及字符串与列表的join操作。
代码及运行结果如图1.38所示。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P64_11091.jpg?sign=1738798001-5YWQoqs7lvhWYyyOxLOjFzr2MvC8vCZl-0-4380907596f4a794c7228e0a186fa5e5)
图1.38 一行代码实现