《华为机试》刷题之HJ90 合法IP

一、题目

二、示例

三、代码

代码 1:

while True:
    try:
        temp = input().split(.)
        signal = 0
        if len(temp) != 4:
            print(NO)
        for item in temp:
            if not item.isdigit(): 
                print(NO)
            elif int(item) > 255 or (item.startswith(0) and len(item) > 1):
                print(NO)
            else:
                signal += 1
        if signal == 4:
            print(YES)
    except:
        break

代码 2:

while True:
    try:
        temp = input().split(.)
        list1 = [str(i) for i in range(0, 256)]
        signal = 0
        if len(temp) != 4:
            print(NO)
        for item in temp:
            if item not in list1: 
                print(NO)
            else:
                signal += 1
        if signal == 4:
            print(YES)
    except:
        break

四、算法说明

将输入的网址按照‘.’进行分割; 判断temp长度,如果不等于 4,直接输出NO; 用for循环遍历列表temp:

    如果有非数字的字符,直接输出NO; 如果数值超过 255,或者开始字符为 0,但是长度大于 1 的情况,例如06,直接输出NO; 否则,将标志位 +1,进入下一次循环。

如果标志位signal == 4,说明地址合法,输出YES。

代码 1 是寻找不合法的字符特征,和代码 1 不同之处在于,代码 2 是寻找合法数据的特征,两个思路形成互补;代码 2 建立了一个[0,255]的列表,判断 IP 地址的字符是否包含在列表中。

胡萝卜

2022年1月20日17:19:03

我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
经验分享 程序员 微信小程序 职场和发展