Codewars編程套路練習:驗證IPv4地址

問題描述

設計一個算法,判斷點分十進制格式的IPv4地址是否符合協(xié)議要求。函數(shù)的輸入限制為一個字符串。

合理的輸入: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)

函數(shù)命名

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

網(wǎng)友解法摘錄

網(wǎng)友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

網(wǎng)友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

網(wǎng)友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))

網(wǎng)友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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評論 25 709
  • python學習筆記 聲明:學習筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學習學習的,另外根據(jù)自己平時的積累進行修正...
    renyangfar閱讀 3,247評論 0 10
  • 01 網(wǎng)上說, 自卑是怎樣一種體驗, 大概就是可以低到塵埃里, 卻又要強裝高傲地忽視一切吧。 我一直以為我不自卑,...
    阿花不胖閱讀 1,016評論 18 15
  • 我來唱一首歌, 古老的一首歌, 我輕輕地唱, 你慢慢地和。 我來寫一幅字, 曾經(jīng)你愛的字, 我深深地寫, 你慢慢地...
    夏兒的夏閱讀 520評論 7 3

友情鏈接更多精彩內(nèi)容