【发布时间】:2021-05-14 13:23:30
【问题描述】:
我编写了一个 python 代码来根据特定的 MOD11 算法检查字符串的有效性,但想进一步使用正则表达式检查该字符串是否具有正确的开头结构。
TIN = '5562000'
import re
x = re.search("\d{7}(\d|K){1}", TIN)
if x != 'None':
print ('Structure Valid')
check = (int(TIN[0])*8) + (int(TIN[1])*7) + (int(TIN[2])*6) + (int(TIN[3])*5) + (int(TIN[4])*4) + (int(TIN[5])*3) + (int(TIN[6])*2)
y = check / 11
z = "{:.0f}".format(y)
print(z, TIN[7])
print((TIN[7]) is str(z))
if ((TIN[7]) == str(z)) & (str(z) != '0'):
print('Valid TIN')
elif ((TIN[7]) == 'K') & (str(z) == '10'):
print('Valid TIN')
elif (TIN[7] == '0') & (str(z) == '11'):
print('Valid TIN')
else:
print('Invalid TIN!')
else:
print('Invalid Structure')
当结构有效时,即字符数正确时,一切正常。但是,如果 TIN 变量中缺少字符,我会收到此错误:
print(z, TIN[7])
IndexError: string index out of range
所以,如果 TIN 的结构不正确,我需要一种方法来不运行这部分代码:
y = check / 11
z = "{:.0f}".format(y)
print(z, TIN[7])
print((TIN[7]) is str(z))
if ((TIN[7]) == str(z)) & (str(z) != '0'):
print('Valid TIN')
elif ((TIN[7]) == 'K') & (str(z) == '10'):
print('Valid TIN')
elif (TIN[7] == '0') & (str(z) == '11'):
print('Valid TIN')
else:
print('Invalid TIN!')
我尝试了带有 break 函数和 sys.exit 的 while 和 for 循环,也尝试了缩进,但我还没有很好地让它工作。关于如何完成这项工作的任何想法?
【问题讨论】:
-
if len(TIN) < 7: print("TIN less than 7 characters")? -
顺便说一句,
{1}从来没有必要或有用。如果只有一个,就不要指定任何重复。