入坑codewars第15天-Regexp Basics - is it IPv4 address?
阿新 • • 發佈:2018-12-21
題目:
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 0
s, 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