目录
1. atexit(程序结束前的操作)
- 1. atexit(程序结束前的操作)
- 2. linux系统import自定义模块失败
- 3. 判断一天是节假日还是工作日
- 3. 验证身份证号码是否正确
import atexit
if __name__=="__main__":
count = 0
@atexit.register
def exit_print_count():
print(count)
count += 1
print("hello world")
结果如下:
hello world
1
说明:
atexit
适用于程序正常完成、异常完成,但不适用于手动终止程序- 如果Exception在
@atexit.register
之前抛出,也不会执行register
函数的
@atexit.register
def exit_print_count():
print(count)
程序在完成前会执行atexit.py
中的register
函数,而register
函数需要接收一个函数类型的参数,该参数就是下面的exit_print_count
函数,所以就会执行exit_print_count
函数;这是python的一种语法糖
- 从上面的结果可以看到,count是累加后最终的结果值
错误详情如下:
from my_prop import my_prop
ModuleNotFoundError: No module named 'my_prop'
原因是linux系统并不能将我们的项目根目录添加到python的system path下,需要我们在程序中手动添加
import os
import sys
current_path = os.path.abspath(os.path.dirname(__file__))
project_root_path = current_path[:current_path.find("project_name/")+len("project_name/")]
sys.path.append(project_root_path)
3. 判断一天是节假日还是工作日
- 安装包
pip install chinesecalendar
- 使用说明
- is_workday方法:判断是否为工作日,返回值为bool类型
- is_holiday方法:判断是否为节假日,返回值为bool类型
- 例子
from chinese_calendar import is_workday, is_holiday
import datetime
from datetime import timedelta
def workdayCountFunc(endDate, beginDate):
workdayCount = 0
while True:
beginDate += timedelta(days=1)
if beginDate >= endDate:
break
else:
if is_workday(beginDate):
workdayCount += 1
return workdayCount
if __name__ == '__main__':
date1 = datetime.date(2021, 10, 7) # 国庆的最后一天假期, 星期四
print(is_workday(date1))
print(is_holiday(date1))
date2 = datetime.date(2021, 10, 9) # 补班, 星期六
print(is_workday(date2))
print(is_holiday(date2))
workdayCount = workdayCountFunc(date2,date1) # 10月8号星期五,是正常上班的
print(workdayCount)
执行结果如下:
False
True
True
False
1
3. 验证身份证号码是否正确
18位身份证的最后一位是验证位,范围为0-10,如果是10,则用字母x代替
验证规则如下:
- 将身份证号码前17位数分别乘以不同的系数。从第1位到第17位对应的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
- 将17位数字和系数相乘的结果相加。然后除以11,得到一个余数,余数的范围为0-10
- 余数分别对应1、0、10、9、8、7、6、5、4、3、2这11个检验码
- 看最后得到的检验码,如果和身份证的最后一位相同,则身份证号码正确,如果不相同,则身份证号码错误
实现代码如下:
if __name__ == '__main__':
def id_card_verify(id_card_str):
id_card_number_alphabets = list(id_card_str)
x_list = ['x', 'X']
# 将字符x或X替换为10
id_card_numbers = ['10' if id_card_number_alphabet in x_list else id_card_number_alphabet
for id_card_number_alphabet in id_card_number_alphabets]
factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
sum = 0
for i in range(17):
sum += (int(id_card_numbers[i]) * factor[i])
check_code = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
if check_code[sum % 11] == int(id_card_numbers[17]):
return '身份证号码正确'
else:
return '身份证号码错误'
id_card_str = '43042219xxxx14xxxx'
verify_msg = id_card_verify(id_card_str)
print(verify_msg)