1. 程式人生 > >入坑codewars第15天-Regexp Basics - is it IPv4 address?

入坑codewars第15天-Regexp Basics - is it IPv4 address?

題目:

Implement String#ipv4_address?, which should return true if given object is an IPv4 address - four numbers (0-255) separated by dots.

It should only accept addresses in canonical representation, so no leading 0s, spaces etc.

題意:

題意:
就是判斷ip地址是否符合ipv4的規則;

思路:

思路就是
(1)先將字串按照“.”分割成列表
(2)然後判斷每一個元素是不是數字
(3)處理特殊情況:
        "10.20.030.40", False 這種情況就是030不對的格式;因此我是這樣處理的,如果<10,且位數大於1則返回錯誤;如果小於100且位數大於2則返回false
        還有就是輸入的格式不是四段的都返回false

 

程式碼如下: 

我的程式碼:
def ipv4_address(address):
    list1=address.split('.')
    if len(list1) < 4 or len(list1)>4:
        return False
    for x in list1:
        if x.isdigit()==False:
            return False
        else:
            if int(x)>255 or int(x)<0:
                return False
            if int(x)<10 and len(x)>=2:
                return False
            if int(x)<100 and len(x)>2:
                return False
    return True

看看大神的程式碼:

大神用的正則表示式:

from re import compile, match

REGEX = compile(r'((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){4}$')#以 . 結尾


def ipv4_address(address):
    # refactored thanks to @leonoverweel on CodeWars
    return bool(match(REGEX, address + '.'))

程式碼的意思我琢磨了一下發現正則表示式是這個意思: 

點與點之間有一個數;

(1到9之間)的兩位數、1開頭的三位數、2開頭的三位數<250的數、2開頭的<=255的數

每個數後面加個 ' . ',然後佔位4個意思就是連續4個這樣的

第二題:

https://www.codewars.com/kata/second-variation-on-caesar-cipher/train/python