Как определить количество символов до и после точки?
Задача заключается в том, что нужно определить кол-во знаков до и после точки у ip, грубо говоря проверка правильности ввода ip адреса.
Например, пользователь вводит:
192.168.0.0 - тут всё ок и система пропускает т.е. True
192.168.1234.0 - вот тут уже система должна заругаться и не пропустить т.е. False, надеюсь все понимают почему ))
Вот думаю как бы это всё по компактней оформить
Ответы (2 шт):
Есть модуль в стандартном наборе для расбора ip адресов
import ipaddress
ipaddress.ip_address("192.168.0.0")
IPv4Address('192.168.0.0')
ipaddress.ip_address('192.168.1234.0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.10/ipaddress.py", line 54, in ip_address
raise ValueError('%r does not appear to be an IPv4 or IPv6 address' %
ValueError: '192.168.1234.0' does not appear to be an IPv4 or IPv6 address
Через try/except можно делать проверки
Или так:
for i in map(int, "192.168.1234.0".split('.')):
if i > 255 or i<0: raise ValueError('bad ip address')
Но например 127.1 или 192.168.1895 являются нормальными ip адресами и проверка на количество цифр не корректна в принципе.
еще так:
ip = '192.168.0.0'
all(-1<int(i)<256 for i in ip.split('.')) # True
UPD
про использование цепочек операторов сравнения в Python - документация.
Comparisons can be chained arbitrarily; for example, x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).