伙计们。我目前是一名学生,昨天在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")
答案 0 :(得分:0)
if
.. elif
块中的缩进是错误的。你也缺少分号,即if IC[-1] == "J":
< - 没有分号的语法错误。
您的校验和表达式似乎忽略了最后一个数字ic[8]
(即"8"
中的"T12345678B"
)。你确定这是对的吗?我假设最后一位数的乘数是1。
您计算x
然后忽略它;然后你尝试比较你没有计算的值y
(这会导致NameError错误)。
我认为潜在的问题是(例如)你有
的地方if IC[-1] == "J"
IC[-1]=J
你实际上意味着拥有
if IC[-1] == 'J':
y = 0 # check-code value
我将如何做到这一点:
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()