当前位置: 首页 > news >正文

算法-华为OD机试-识别有效的IP地址和掩码并进行分类统计

1.描述

见牛客网

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

2. 分析

根据题目要求,分为以下几步

1. 提取IP地址和子网掩码

我们首先需要拆分输入的每一行,分别提取IP地址和子网掩码,并检查它们的合法性。

2. 分类解析识别IP地址

根据题目提供的IP地址范围,将IP地址分类为A/B/C/D/E类地址。同时,检查IP地址是否属于私有IP地址。

3. 检查子网掩码的合法性

合法的子网掩码必须是二进制下前面是连续的1,然后全是0。非法的子网掩码需要单独归类。

4. 统计结果

最后,将所有的分类结果统计并输出。ip或者子网有一个为非法,就记为非法并统计下一条

3.代码

import sys
import redef is_sw(ip):nums = ip.split('.')one = int(nums[0])two = int(nums[1])if one == 10:return Trueelif one == 172 and 16<=two<=32:return Trueelif one == 192 and two==168:return Truereturn Falsedef is_ip(ip):    k = int(ip.split(".")[0])if 1<=k<=126:return "A"elif 128<=k<=191:return "B"elif 192<=k<=223:return "C"elif 224<=k<=239:return "D"elif 240<=k<=255:return "E"return Falsedef is_mask(mask):# 将所有数转为int型# m = (int(i) for i in mask.split("."))# # 将所有数转为二进制# m = (bin(i) for i in m)# # 连接成一个字符串,每一个去掉0b前缀,左补全0# mask_str = "".join( i[2:].zfill(8) for i in m)                # 上面的也可以写成一句mask_str = "".join([bin(int(i))[2:].zfill(8) for i in mask.split(".")])# 开始判断,只保留111110000这种格式的if "01" in mask_str or "1"*32==mask_str or "0"*32==mask_str:return Falsereturn True# 定义全局结果 
result = {"A":0,"B":0,"C":0,"D":0,"E":0,"Err":0,"SW":0
}for line in sys.stdin: # 提取 Ip 和 maskip,mask = line.split("~")# 提取无效 Ip 或者 无效掩码,不计数,开始下一行# 去掉非  1.12.123.123 这种格式的,如19..10.,注意这里没有过滤 大于 255的# 注意这里 . 要转义,用\.ip_ptn = "^(\d{1,3}\.){3}\d{1,3}$"if not re.match(ip_ptn,ip) or not re.match(ip_ptn,mask):result["Err"] += 1continue# 去掉 0 和127 开头的if ip.startswith("0.") or ip.startswith('127.'):continue # 转为列表ip_part  = list(map(int,ip.split(".")))mask_part  = list(map(int,mask.split(".")))# 识别大于255的,因为\d是0-9,所以小于0的会在上面过滤掉了if any(i>255 for i in ip_part) or any(m>255 for m in mask_part):result["Err"]+=1continue# 识别非法掩码if not is_mask(mask):result["Err"] += 1continue# 因为 ip类型和私网IP不冲突,所有不用continue,两都都判断# 识别IP地址ip_type = is_ip(ip)if ip_type != False:result[ip_type] += 1# 识别私网IP地址if is_sw(ip):result["SW"] += 1for v in result.values():print(v,end=" ")

4.知识点

1.any()的用法

any(可迭代对象) 表示,可迭代对象中,有一项为真返回真
列中用来判断 所有都要小于255的情况,即

# 表示列表中所有数任何一个大于255就返回真,所有都小于255就返回假
any(i >255 for i in list)

这里还有一个all()函数,表示可迭代对象中,有全部为真才返回真,即有一项为假就返回假

# 表示所有的都要小于255才返回真,任何一个大于255就为假
all(i<255 for i in list)

2.正则式

# 如果能在 str 内匹配到 ptn 就返回真,否则为假
re.match(ptn,str)

3.常用方法

方法名描述
join(t)连接字符串t
startswith(d)以d开头
split©按c拆分
bin(n)整数n转二进制
int(s)字符s转int
zfill(n)左补n位全零
rjust(n,c)右补n对应c字符
ljust(n,c)左补n对应c字符

相关文章:

算法-华为OD机试-识别有效的IP地址和掩码并进行分类统计

1.描述 见牛客网 https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a74356822. 分析 根据题目要求&#xff0c;分为以下几步 1. 提取IP地址和子网掩码 我们首先需要拆分输入的每一行&#xff0c;分别提取IP地址和子网掩码&#xff0c;并检查它们的合法性。 2.…...

钉钉开发网页应用JSAPI前端授权鉴权nodejs实现

钉钉开发网页应用JSAPI前端授权鉴权nodejs实现 使用钉钉进行H5网页开发的时候&#xff0c;需要调用一些钉钉提供具有原生能力的api&#xff0c;要调用这些api需要进行jsapi授权。 详见官方文档&#xff08;可选&#xff09;开发网页应用前端 - 钉钉开放平台 (dingtalk.com) 官方…...

uniapp 自定义全局弹窗

自定义全局弹窗可在js和.vue文件中调用&#xff0c;unipop样式不满足&#xff0c;需自定义样式。 效果图 目录结构 index.vue <template><view class"uni-popup" v-if"isShow"><view class"uni-popup__mask uni-center ani uni-cust…...

element+-ui图片无法使用--安装

element-ui图片无法使用 安装npm install element-plus/icons-vue 注册 // main.jsimport * as ElementPlusIconsVue from element-plus/icons-vueconst app createApp(App) for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, compo…...

Python编码系列—Python ORM(对象关系映射):高效数据库编程实践

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

一次日志记录中使用fastjson涉及到ByteBuffer的教训

背景 目前本人在公司负责的模块中&#xff0c;有一个模块是负责数据同步的&#xff0c;主要是将我们数据产线使用的 AWS Dynamodb 同步的我们的测试QA 的环境的 MongoDB 的库中&#xff0c;去年开始也提供了使用 EMR 批量同步的功能&#xff0c;但是有时候业务也需要少量的数据…...

掌握TCP连接管理与流量控制:从零开始

文章目录 1. TCP连接管理1.1 三次握手&#xff08;Three-way Handshake&#xff09;1.2 四次挥手&#xff08;Four-way Handshake&#xff09;1.3 TCP连接管理的重要性 2. TCP流量控制2.1 滑动窗口&#xff08;Sliding Window&#xff09;2.2 拥塞控制&#xff08;Congestion C…...

python提取b站视频的音频(提供源码

如果我想开一家咖啡厅&#xff0c;那么咖啡厅的音乐可得精挑细选&#xff01;又假设我非常喜欢o叔&#xff0c;而o叔只在b站弹钢琴&#xff0c;那这时候我就得想方设法把b站的视频转为音频咯&#xff01; 一、首先打开网页版bilibili&#xff0c;按F12&#xff1a; 二、刷新页面…...

嵌入式Linux ,QT5 鼠标键盘设备参数指定环境变量的方法

根文件系统中&#xff0c;一般用mdev来管理设备&#xff0c;不像udev方便&#xff0c;有时候在执行rcS脚本的时候因为&#xff0c;太快&#xff0c;有些设备比如鼠标还没在/dev/input中生成设备文件&#xff0c;最好使用前用mdev -s扫描并等待几秒钟&#xff0c;然后就可以在in…...

C语言钥匙迷宫2.0

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。废话不多说&#xff0c;咱们直接开始。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> enum color {Y,B,R …...

【多线程】初步认识Thread类及其应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 上篇文章我们简单介绍了什么是进程与线程&#xff0c;以及他们之间的区别与联系&#xff0c;实际应用中还是以多线程编程为主的&#xff0c;所以这篇文章就让我们更加深入地去剖…...

algorithm算法库学习之——划分操作和排序操作

algorithm此头文件是算法库的一部分。本篇介绍划分操作和排序操作。 划分操作 is_partitioned (C11) 判断范围是否已按给定的谓词划分 (函数模板) partition 将范围中的元素分为两组 (函数模板) partition_copy (C11) 复制一个范围&#xff0c;将各元素分为两组 (函数模板) st…...

XSS实验记录

目录 XXS地址 实验过程 Ma Spaghet Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok, Boomer XXS地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 实验过程 Ma Spaghet 要求我们弹出一个alert(1337)sandbox.pwnfuncti…...

Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试

0 参考资料 STM32MP13xx参考手册.pdf&#xff08;RM0475&#xff09; ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf 1 GIC配置中断效果测试 前面我们已经实现了GIC的配置&#xff0c;为了验证GIC是否配置有效&#xff0c;本例…...

c++动态数组new和delete

文章目录 动态数组的使用大全1. **基本创建和初始化**2. **动态调整大小**3. **动态数组的使用与标准库 std::vector**4. **动态数组作为函数参数**输出 5. **使用动态数组存储用户输入** 动态数组的使用大全 1. 基本创建和初始化 示例&#xff1a; #include <iostream&g…...

Redis热点知识速览(redis的数据结构、高性能、持久化、主从复制、集群、缓存淘汰策略、事务、Pub/Sub、锁机制、常见问题等)

Redis是一个开源的、使用内存作为存储的、支持数据结构丰富的NoSQL数据库。它的高性能、灵活性和简单易用使其在许多场景下成为首选的缓存解决方案。以下是Redis的常见和热点知识总结。 数据结构 Redis支持五种基本数据结构&#xff1a; String&#xff1a;字符串是Redis中最…...

【C++浅析】lambda表达式:基本结构 使用示例

基本结构 [捕获列表](参数列表) -> 返回类型 { // 函数体 } 捕获列表 ([ ]): 用于指定外部变量的捕获方式。可以&#xff1a; 通过值捕获&#xff1a;[x]通过引用捕获&#xff1a;[&x]捕获所有变量通过值&#xff1a;[]捕获所有变量通过引用&#xff1a;[&]自…...

利用Redis获取权限的多种方式

更多实战内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10333.html Redis是我们在实战中经常接触到的一款数据库&#xff0c;因其在前期打点中被利用后可直接影响服务器安全所以在攻防过程中也备受红队关注&#xff0c;在本文中会重点分享一…...

LeetCode - LCR 146- 螺旋遍历二维数组

LCR 146题 题目描述&#xff1a; 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完…...

如何获取Bing站长工具API密钥

Bing站长工具近期悄然上线了网站URL推送功能&#xff0c;似乎有意跟随百度的步伐。这个新功能允许站长通过API向Bing提交链接数据&#xff0c;当然也可以通过Bing站长工具手动提交。 本文将详细介绍如何通过Bing站长工具生成用于网站链接推送的API密钥。 首先&#xff0c;访问…...

Spatial Audio(空间音频)与多声道环绕声:从5.1到7.1的沉浸式体验升级

1. 从立体声到环绕声&#xff1a;音频技术的进化之路 记得我第一次在朋友家体验5.1声道家庭影院时&#xff0c;那种子弹从耳边呼啸而过的感觉让我彻底震撼了。这完全颠覆了我对"好音质"的认知——原来声音可以如此立体、如此真实。要理解现代的空间音频技术&#xf…...

泛微OA单点登录配置全攻略:从零开始实现第三方系统免密登录

泛微OA单点登录深度实战&#xff1a;Token机制与系统集成最佳实践 对于企业IT架构师和运维团队而言&#xff0c;系统间的无缝衔接一直是提升工作效率的关键。想象一下这样的场景&#xff1a;销售人员在CRM系统中完成客户跟进后&#xff0c;无需反复登录就能直接跳转到OA系统提…...

用Logisim搞定六进制计数器:从真值表到同步置数/异步清零的保姆级布线教程

用Logisim搞定六进制计数器&#xff1a;从真值表到同步置数/异步清零的保姆级布线教程 第一次在Logisim里搭建计数器电路时&#xff0c;看着那些密密麻麻的逻辑门和跳线&#xff0c;我盯着屏幕发呆了半小时——明明按照课本上的真值表连接&#xff0c;仿真时却总是卡在某个状态…...

MyBatis 中 CDATA 的实战应用与避坑指南

1. 为什么MyBatis需要CDATA 在MyBatis的日常开发中&#xff0c;我们经常需要在XML映射文件中编写SQL语句。但XML本身对特殊字符有着严格的限制&#xff0c;比如小于号(<)、大于号(>)、和号(&)等字符在XML中都有特殊含义。这就导致了一个很现实的问题&#xff1a;当我…...

OpenClaw多模型管理:同时接入百川2-13B-4bits与其他开源大模型

OpenClaw多模型管理&#xff1a;同时接入百川2-13B-4bits与其他开源大模型 1. 为什么需要多模型管理&#xff1f; 去年冬天&#xff0c;我尝试用OpenClaw自动化处理一批技术文档的翻译和摘要任务时&#xff0c;遇到了一个典型问题&#xff1a;当处理简单段落翻译时&#xff0…...

从巨鲸到万物生长:Claude Code如何颠覆AI开发,带你从对话走向Agent平台搭建!

Claude Code凭借其六大核心能力&#xff0c;将AI开发带入全新阶段。通过CLAUDE.md实现项目记忆增强&#xff0c;Skills固化可复用工作流&#xff0c;Sub-Agent处理专业化任务&#xff0c;MCP连接外部服务&#xff0c;Plug-In打包完整解决方案。本文深入解析这些功能&#xff0c…...

Adafruit DPS310传感器驱动库深度解析与嵌入式实践

1. Adafruit DPS310 压力传感器驱动库深度解析与工程实践 1.1 项目定位与硬件基础 Adafruit DPS310 是一款高精度、低功耗的数字气压/温度传感器&#xff0c;基于 Infineon&#xff08;原 Bosch Sensortec&#xff09;DPS310 芯片设计。该芯片采用 MEMS 技术&#xff0c;集成…...

电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的‘坑’

电赛小车避坑指南&#xff1a;从2011到2024&#xff0c;那些年我们踩过的传感器和通信模块的"坑" 参加全国大学生电子设计竞赛的同学们都知道&#xff0c;小车控制类赛题一直是热门选项。从2011年的双车自主超车到2024年的自动行驶小车&#xff0c;这些题目看似简单&…...

云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本)

云效流水线实战&#xff1a;从零部署Java应用到阿里云ECS&#xff08;含完整脚本&#xff09; 在当今快节奏的软件开发环境中&#xff0c;自动化部署已成为提升团队效率的关键环节。阿里云云效平台提供的流水线功能&#xff0c;为开发者提供了一套完整的CI/CD解决方案&#xff…...

简易CPU设计入门:算术逻辑单元(五)

专栏导航 上一篇&#xff1a;简易CPU设计入门&#xff1a;算术逻辑单元&#xff08;四&#xff09; 专栏目录 下一篇&#xff1a;简易CPU设计入门&#xff1a;算术逻辑单元&#xff08;六&#xff09; 项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&am…...