我正在编写一段代码,通过将序列号的各个组成部分与已知值列表进行比较,来测试序列号是否具有有效值以及格式是否正确。例如:
VALUES = [1, 2, 3, 4, 5]
serial = "013452345252345"
if int(serial[0:2]) in values:
return True
在有效的情况下,前两个数字可以视为一个整数,但是在某些情况下,串行可能会作为完整的垃圾输入,因此我通过将我的所有值作为字符串来处理来处理所有有效情况,例如:
VALUES = ['01', '02', '03', '04', '05']
serial = "a;alskdjfadslkj"
if serial[0:2] in values:
return True
这是正确的方法还是我可以做得更好或更聪明的事情?感谢您的帮助。
最佳答案
您所做的就是您应该做的。您目前唯一缺少的是循环浏览要检查的字段(尽管这取决于设置的字段长度):
def Serial_Checker(values,serial,field_length):
serial_length = len(serial)
cycler = field_length
serial_valid = True
while cycler < serial_length:
if serial[cycler-field_length:cycler] in VALUES:
cycler += field_length
else:
serial_valid = False
break
if serial_length%field_length <> 0: # % is the remainder operator
serial_valid = False #In case there is leftover at the end of the serial
return serial_valid
VALUES = ['01', '02', '03', '04', '05']
serial = "a;alskdjfadslkj"
Serial_Checker(VALUES,serial,2)
这应该从函数返回false。
我不知道有任何内置函数,但是如果格式必须具有所有数字,则可以始终使用“ isdigit”方法:
d = 'somestring'
d.isdigit()
如果整个字符串由数字组成,则最后一行将返回布尔值。
如果您需要更一般的解决方案,我可以根据需要添加更多。
关于python - 在Python中处理意外的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21619209/