这是numb3rs.py的代码
import re
def main():
print(validate(str(input("IPv4 Address: "))))
def validate(ip):
return bool(re.match(r"^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.)){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$", ip))
if __name__ == "__main__":
main()
这是test_numb3rs.py的代码
from numb3rs import validate
def test_max_min():
assert(validate("1.1.1.1")) == True
assert(validate("255.255.255.255")) == True
def test_alpha():
assert(validate("abc")) == False
def test_incorrect_limit():
assert(validate("1000.1000.266.1000")) == False
assert(validate("05.1c2.02.04")) == False
assert(validate("5.1111.1.1")) == False
assert(validate("1.1.1.1.1")) == False
assert(validate("1.1.1..")) == False
assert(validate("1.1000.1.1")) == False
assert(validate("1000.1.1.1")) == False
任何帮助将非常感激
我尝试添加测试,但仍然导致错误
考虑使用
re.compile
在 validate
函数之外定义一个常量,这样就不需要在每次调用它时都进行编译。
此外,您可以为 IPV4 地址的单个有效八位字节定义模式并将其乘以四:
import re
IPV4_OCTET_PATTERN = r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
IPV4_PATTERN = re.compile(r'^' + r'\.'.join([IPV4_OCTET_PATTERN] * 4) + r'$')
def main():
ip_address = input('IPv4 Address: ')
print(validate(ip_address))
def validate(ip_address: str) -> bool:
"""Validates an IPv4 address."""
return True if IPV4_PATTERN.match(ip_address) else False
if __name__ == '__main__':
main()