需要请求进行IC验证的Python代码

时间:2017-05-12 00:28:20

标签: python

伙计们。我目前是一名学生,昨天在python中接受了编程测试。 问题是要求我们输入一个以T开头的IC,我们要通过找到这个等式的其余部分来检查它的验证。 x=(int(IC[1])*2+int(IC[2])*7+int(IC[3])*6+int(IC[4])*5+int(IC[5])*4+int(IC[6])*3+int(IC[7])*2+4)%11

此外,他们还说明了这一点 Z = 0,J = 1,I = 2,H = 3,G = 4,F = 5,E = 6,d = 7,C = 8,B = 9,A = 10 因此,基本上x需要具有与分配最后一个字母的值相同的值,例如。 T12345678B不是真正的IC,因为x不符合B分配的值。但是,我不知道为什么mt代码不起作用,你能帮我吗?谢谢

IC=str(input("Enter the IC(starting with T) to be validated (all letters to be in caps):"))
x=(int(IC[1])*2+int(IC[2])*7+int(IC[3])*6+int(IC[4])*5+int(IC[5])*4+int(IC[6])*3+int(IC[7])*2+4)%11
J=0
Z=1
I=2
H=3
G=4
F=5
E=6
D=7
C=8
B=9
A=10
if IC[-1] == "J"
IC[-1]=J
elif IC[-1]== "Z"
IC[-1]= Z
elif IC[-1]== "I"
IC[-1]=I
elif IC[-1] =="H"
IC[-1]=H
elif IC[-1] =="G"
IC[-1]=G
elif IC[-1] =="F"
IC[-1]=F
elif IC[-1] =="E"
IC[-1]=E
elif IC[-1] =="D"
IC[-1]=D
elif IC[-1] =="C"
IC[-1]=C
elif IC[-1] =="B"
IC[-1]=B
elif IC[-1] =="A"
IC[-1]=A

if x == y
print ("Validity of the IC: True")
else
print ("Validity of the IC: False")

1 个答案:

答案 0 :(得分:0)

  1. if .. elif块中的缩进是错误的。你也缺少分号,即if IC[-1] == "J":< - 没有分号的语法错误。

  2. 您的校验和表达式似乎忽略了最后一个数字ic[8](即"8"中的"T12345678B")。你确定这是对的吗?我假设最后一位数的乘数是1。

  3. 您计算x然后忽略它;然后你尝试比较你没有计算的值y(这会导致NameError错误)。

  4. 我认为潜在的问题是(例如)你有

    的地方
    if IC[-1] == "J"
        IC[-1]=J
    

    你实际上意味着拥有

    if IC[-1] == 'J':
        y = 0          # check-code value
    
  5. 我将如何做到这一点:

    def is_valid_ic(ic_str):
        # force string to uppercase
        ic_str = ic_str.upper()
    
        # a valid IC must have 10 characters
        if len(ic_str) != 10:
            return False
    
        # the first character of a valid IC must be 'T'
        if ic_str[0] != 'T':
            return False
    
        # characters 1..8 must be digits
        try:
            # convert characters to numbers
            a, b, c, d, e, f, g, h = [int(i) for i in ic_str[1:9]]
        except ValueError:
            # some character is not a digit
            return False
    
        # last character must match checksum
        checksum = (2 * a + 7 * b + 6 * c + 5 * d + 4 * e + 3 * f + 2 * g + h + 4) % 11
        return ic_str[9] == "ZJIHGFEDCBA"[checksum]
    
    def main():
        s = input("Please enter an IC (starting with T): ")
    
        if is_valid_ic(s):
            print("IC is valid")
        else:
            print("IC is not valid")
    
    if __name__=="__main__":
        main()