salge 发表于 2021-7-5 14:53

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

本帖最后由 salge 于 2021-7-5 15:04 编辑

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

https://static.52pojie.cn/static/image/hrline/1.gif
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=
    a=0
    sum=0
    for i in IDcode[:17]:
      for d in c:
            sum=sum+(d*int(i))
            a=a+1
    e=sum%11
    f="10X98765432"
    if not(f==IDcode[-1:]):
      print("Error!")
      return 0
    else:
      print("OK!")
      return 0
my_ID()
while my_ID()==0:
    my_ID()

https://static.52pojie.cn/static/image/hrline/1.gif
新手可以看看这代码,很有帮助.都是一些基本知识.


额微粒波地 发表于 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

身份证号的第18位校验码;加权求和

灿烂的小居 发表于 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
# 在开始进行简要的说明,可以帮助别人理解和自己的后期代码复查。

    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
可以修改 ...

谢谢~好的.我知道了{:1_921:}{:1_921:}{:1_921:}

salge 发表于 2021-7-5 15:30

anandyuan 发表于 2021-7-5 15:20
身份证号的第18位校验码;加权求和
YES~果然是大佬;www

涛之雨 发表于 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
页: [1] 2
查看完整版本: 大家来看看,这python代码还可以再优化吗?