Codewars编程套路练习:验证IPv4地址

问题描述

设计一个算法,判断点分十进制格式的IPv4地址是否符合协议要求。函数的输入限制为一个字符串。

合理的输入:1.2.3.4 123.45.67.89

不合理的输入:1.2.3 1.2.3.4.5 123.456.78.90 123.045.067.089

问题标签

算法、正则表达式、高级语言特性、基础知识、字符串、声明式编程(Declarative Programming)

函数命名

def is_valid_IP(strng):
    return None

测试用例

Test.assert_equals(is_valid_IP('12.255.56.1'),     True)
Test.assert_equals(is_valid_IP(''),                False)
Test.assert_equals(is_valid_IP('abc.def.ghi.jkl'), False)
Test.assert_equals(is_valid_IP('123.456.789.0'),   False)
Test.assert_equals(is_valid_IP('12.34.56'),        False)
Test.assert_equals(is_valid_IP('12.34.56 .1'),     False)
Test.assert_equals(is_valid_IP('12.34.56.-1'),     False)
Test.assert_equals(is_valid_IP('123.045.067.089'), False)

原文链接

http://www.codewars.com/kata/ip-validation/python

编程派解法

def is_valid_IP(s):
    a = s.split('.')
    if len(a) != 4:
        return False
    for x in a:
        if not x.isdigit() or x.startswith('0'):
            return False
        i = int(x)
        if i < 0 or i > 255:
            return False
    return True

网友解法摘录

网友cwhy:获得最佳实践推荐12次

def is_valid_IP(strng):
    lst = strng.split('.')
    passed = 0
    for sect in lst:
        if sect.isdigit():
            if sect[0] != '0':
                if 0 < int(sect) <= 255:
                    passed += 1
    return passed == 4

网友saurus:使用正则表达式

import re
def is_valid_IP(strng):
    return re.match('\.'.join(['(\d|1?\d\d|2[0-4]\d|25[0-5])']*4) + '$', strng) is not None

网友pacofvf:超长一行流

import re
def is_valid_IP(address):
    return bool(re.match("^([1][0-9][0-9]\.|^[2][5][0-5].|^[2][0-4][0-9]\.|^[1][0-9][0-9]\.|^[0-9][0-9]\.|^[0-9]\.)([1][0-9][0-9]\.|[2][5][0-5]\.|[2][0-4][0-9]\.|[1][0-9][0-9]\.|[0-9][0-9]\.|[0-9]\.)([1][0-9][0-9]\.|[2][5][0-5]\.|[2][0-4][0-9]\.|[1][0-9][0-9]\.|[0-9][0-9]\.|[0-9]\.)([1][0-9][0-9]|[2][5][0-5]|[2][0-4][0-9]|[1][0-9][0-9]|[0-9][0-9]|[0-9])$",address))

网友natict:更简单的一行流

def is_valid_IP(s):
    return s.count('.')==3 and all(o.isdigit() and 0<=int(o)<=255 and str(int(o))==o for o in s.split('.'))

下一个

http://www.codewars.com/kata/5262119038c0985a5b00029f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,069评论 25 709
  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,112评论 0 10
  • 01 网上说, 自卑是怎样一种体验, 大概就是可以低到尘埃里, 却又要强装高傲地忽视一切吧。 我一直以为我不自卑,...
    阿花不胖阅读 970评论 18 15
  • 我来唱一首歌, 古老的一首歌, 我轻轻地唱, 你慢慢地和。 我来写一幅字, 曾经你爱的字, 我深深地写, 你慢慢地...
    夏儿的夏阅读 494评论 7 3