吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1603|回复: 17
收起左侧

[讨论] 大家来看看,这python代码还可以再优化吗?

[复制链接]
salge 发表于 2021-7-5 14:53
本帖最后由 salge 于 2021-7-5 15:04 编辑

大家好,求助一下,我现在学习python语言,从0开始,全都是看书学习的知识,没有报课程和视频.
看看以下代码还有优化的地方吗?相互学习学习.谢谢大家.继续努力.
大家猜猜这是用来做什么的


[Python] 纯文本查看 复制代码
def my_ID():
    IDcode1=input()
    IDcode=IDcode1.replace("x","X")
    if not(len(IDcode)==18):
        print("Error!")
        return 0
    b=["1","2","3","4","5","6","7","8","9","0","X"]
    for i in IDcode:
        if not(i in b):
            print("Error!")
            return 0
    c=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    a=0
    sum=0
    for i in IDcode[:17]:
        for d in c[a:a+1]:
            sum=sum+(d*int(i))
            a=a+1
    e=sum%11
    f="10X98765432"
    if not(f[e:e+1]==IDcode[-1:]):
        print("Error!")
        return 0
    else:
        print("OK!")
        return 0
my_ID()
while my_ID()==0:
    my_ID()



新手可以看看这代码,很有帮助.都是一些基本知识.


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

额微粒波地 发表于 2021-7-5 15:01
看起来是跟身份证号码相关,具体做什么用途,体现什么作用,我还真不知道
ITMN 发表于 2021-7-5 15:15
判定数字可以使用:
IDcode = IDcode.rstrip('X')
if not(IDcode.isdigit()):
    print("Error!")
    return 0
anandyuan 发表于 2021-7-5 15:20
灿烂的小居 发表于 2021-7-5 15:28
不建议使用a, b, c, d, e, f这种无实际意义的变量名
例如b是一个list,目的应该是一个检测的set
可以修改b为
CheckListSet = ["1","2","3","4","5","6","7","8","9","0","X"]
Or
check_list_set = ["1","2","3","4","5","6","7","8","9","0","X"]

在代码中适当的添加注释
例如多个loop使用i
# 在开始进行简要的说明,可以帮助别人理解和自己的后期代码复查。

[Python] 纯文本查看 复制代码
    CheckListSet = ["1","2","3","4","5","6","7","8","9","0","X"]
    # 遍历Input ID,检测合规性
    for i in IDcode:
        if not(i in CheckListSet):
            print("Error!")
            return 0


避免一些直译的词语例如sum,有些函数中sum可能拥有实际功能,可以修改成 Id_sum 这样的
 楼主| salge 发表于 2021-7-5 15:30
灿烂的小居 发表于 2021-7-5 15:28
不建议使用a, b, c, d, e, f这种无实际意义的变量名
例如b是一个list,目的应该是一个检测的set
可以修改 ...

谢谢~好的.我知道了
 楼主| salge 发表于 2021-7-5 15:30
anandyuan 发表于 2021-7-5 15:20
身份证号的第18位校验码;加权求和

YES~果然是大佬
涛之雨 发表于 2021-7-5 15:44
本帖最后由 涛之雨 于 2021-7-5 15:51 编辑

循环检测的话可以用正则表达式去验证可以更简单点;

此外,外面单独的循环检测字符有效性可以放到求和的部分,先判断是不是在0-9中,然后再求和。
然后最后一位可以不判断是否在范围内,直接比对是不是计算出来的结果就行了。

此外,数字0-9好像有个参数可以直接获取,不需要列举出来,还可以用range生成列表,也可以精简代码量
18237023511 发表于 2021-7-5 16:09
也可以通过列表推导式来减少代码量
Fris 发表于 2021-7-5 16:28
not(a==b) 为啥不写成 a!=b
not(a in b) 可以写成 a not in b
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表