1. 九九乘法表
第一步:定义乘数x,即每一行中不变的那个数;定义被乘数y,即每一行的乘以乘数x,依次递增1,但不超过x的数;
第二步:print被乘数,乘数,积的相关信息,当乘数增加1时,输出一个换行;
第三步:格式化输出最大长度为6的字符串,右补空格,以显示整齐。
for x in range(1,10): ---x为乘数
for y in range(1,x+1): ---y为被乘数
print(f"{y}x{x}={x*y}".ljust(6), end=' ') ---使用新特性格式化字符串,也可以使用format,%等格式化,其中ljust(6)左对齐,长度为6,右补空格
print("") ---打印一个换行
九九乘法表
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,应发奖金总数。
思路:利用数组(列表)来分界和定位。
arr = [1000000, 600000, 400000, 200000, 100000, 0] ---定义利润列表
rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] ---定义提成比例列表,与利润列表一一对应
while True:
i = input('净利润(q退出):') ---获取用户输入
if i == 'q':
exit(0) ---退出程序
if not i.isdigit(): ---如果不是数字,则重新开始循环,重新输入数据
continue
reward = [] ---定义奖金列表,存放每一区间计算的奖金
print("奖金为:", end='') ---不换行
I=int(i)
for idx in range(0,6):
if I > arr[idx]:
reward.append ((I - arr[idx]) * rat[idx]) ---将每一区间的奖金存放在奖金列表中
I = arr[idx]
reward.reverse() ---逆序奖金列表,目的为方便输出
if(len(reward)) == 1: ---如果只有一个,直接输出
print(reward[0])
else:
print(" + ".join([str(num) for num in reward]),"=",sum(reward)) ---输出每个区间的奖金,并求和
发放奖金的梯度
3. 递归获取目录下文件的修改时间
列出某一文件目录下的所有文件(包括其子目录文件),打印修改时间,距当前时间有几天几时几分
思路:使用标准库os模块的os.walk方法,使用datetime模拟计算时间差。
# encoding=utf-8
import os
import datetime
# 循环H:\SecureCRT目录和子目录,r表示原始字符串,不含转义字符
print(f"当前时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
for root, dirs, files in os.walk(r"H:\SecureCRT"):
for file in files:
# 获取文件的绝对路径
absPathFile = os.path.join(root, file)
# 获取修改时间并转化为datetime类型
modifiedTime = datetime.datetime.fromtimestamp(os.path.getmtime(absPathFile))
# 获取当前时间
now = datetime.datetime.now()
# 获取时间差
diffTime = now - modifiedTime
# 打印相关信息,ljust(60)表示该字符串,若不足60字节,则右补空格
# diffTime.days指间隔的天数,diffTime.seconds表示间隔除了天数外还剩余的秒数,将其转化为时和分
# diffTime.seconds//3600: 对3600秒取整表示小时数
# (diffTime.seconds%3600)//60: 先对3600秒取余,再对60秒取整,表示分钟数
print(f"{absPathFile}".ljust(60), f"修改时间[{modifiedTime.strftime('%Y-%m-%d %H:%M:%S')}] \
距今[{diffTime.days}天{diffTime.seconds//3600}时{(diffTime.seconds%3600)//60}分]")
递归获取目录下文件的修改时间
4. 两行代码查找替换3或5的倍数
列出1~20的数字,若是3的倍数就用apple代替,若是5的倍数就用orange代替,若既是3的倍数又是5的倍数,就用apple、orange代替。注意,只能使用两行代码。
思路:若是一般的思路,则肯定是一个for循环,再加上if else等操作。而这里练习使用字符串的切片操作。
for i in range(1,21):
print("apple"[i%3*5:]+"orange"[i%5*6:] or i)
两行代码查找替换3或5的倍数
其实算法很简单,就是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。
5. 一行代码实现示例4的效果
思路:学习使用列表推导式及字符串与列表的join操作。
print("\n".join([str("apple"[i%3*5:]+"orange"[i%5*6:] or i) for i in range(1,21)]))
一行代码实现








网友评论