自己编写代码与UDP模拟软件交互详解
自己编写代码与UDP模拟软件交互详解环境说明windows 10 x64(这个应该问题不大)
python实现
以阶段一的两台设备为例
打开两个模拟软件,软件1选择设备1接口0,软件2选择设备2接口0,然后分别点击重载参数来获取参数,效果如图
随后两边都点击接通连路,并测试连通性,试着传输几个数据,发现效果不错
端口解释
关系说明举个简单的类比大家就知道了
上层端口控制物理层,就如同老板与跑腿的的关系,跑腿的并不处理信息而是只负责传输软件上写的对方端口就是告诉跑腿的要传到哪儿。
举个例子,软件1的上层端口要发送11111111给软件2,然后上层端口就把这个信息交给软件1物理层本地端口11100,然后对方端口设置的是12100,物理层就只需要把这个交给12100也就是软件2的物理层就完事儿了。
软件2的物理层接收到了这个消息之后立马报告给老板,也就是物理层2的上层端口12400
至此,信息的发送就完成了。
什么?软件1怎么知道软件2有没有收到包?模拟软件的名字都写了,这是UDP发包,不管那么多的。
python 实现也就是说我们有2个上层端口,两个相连通的物理端口,OK,也就是说我们 ...
Github 学习总结
Github 学习总结概念理解Repository顾名思义仓库,一个项目就是一个仓库,在GitHub上面也能通过全局搜索搜到一堆有趣的仓库
init在创建GitHub仓库的时候有个 Initial的选项,就是生成一个空仓库,然后将你的Description 生成为一个readme.md的文件
工作区我们修改代码这些的文件,也可以理解成现有的文件,都是我们正常工作时修改用到的,属于工作区
暂存区(缓存区)在我们修改完文件之后,使用git add命令提交到的区域就是缓存区,缓存区里面就是可以添加可以减少的一堆文件,不再修改之后使用git commit将文件都整合一下,提交到版本库里面
版本库我们的每一次整合好了的修改就是一次commit ,commit弄完之后,我们就用git push将我们在本地上的改动部署到远程仓库中
分支(branch)一个项目,不同的开发者可对应不同的版本,比如dev版,发行版,内测版等等,这些不同的版本就是一个个的分支(针对开发人员来说)
标签(tag)和传统的标签意义不同,相当于发行给大众的版本号,生成一个标签命令执行后,会根据当前版本,把所有的代码打包成zip ...
位运算计算整数之和
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2输出: 3示例 2:
输入: a = -2, b = 3输出: 1
一开始看到这个两数相加我笑了,无非是return a+b嘛,但是看到不使用运算符+和-的时候我蒙圈了,?!,纳尼?
于是我试着提交了一下return a+b
居然过了哈哈哈哈
算了不耍无赖,正经看题,不准用+和-,那就只能用位运算了呗
5 = 101
3 = 011
2 = 010
需要找到一种位运算,在不进位的情况下满足1?1=0,1?0=1,0?0=0这个运算符就是xor,然后考虑进位的问题
如果是进位的话,考虑一下情况
7 = 111
7 = 111
14 = 1110
使用xor得到的结果111 xor 111 = 0 ,而``111 and 111 = 111`,所以,a+b = (a xor b)+(a&b << 1)
写个迭代试试
1234567def getSum(a,b): jin = (a&b)<<1 zheng = (a^b) if(jin ...
判断是否是完全平方数
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入:16输出:True示例 2:
输入:14输出:False
最开始想到的是使用sqrt()直接判断,什么?不能使用sqrt()?
不能使用任何内置的库函数,所以使用math.log的方案也挂掉了,老老实实去凑吧
12345678910def func(num): if(num<0): return False if(num<=2): return True for i in range(1,num//2): if(i*i==num): return True if(i*i>num): return False
虽然我觉得他肯定要卡你时间复杂度
果然后面他给我报错,MemoryError不过是发生在Line 7也就是for i in range(1,num//2):这一 ...
各个位上的数字相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
这个直接用循环来做非常快,题目进阶要求说不使用循环和递归,且要求时间复杂度O(1)之内解决
直接上很秀的解法
12def func(num): return (num%9) or (9*bool(num))
假设原来的数是abcd即,1000*a+100*b+10*c+d之后我们需要的数字是a+b+c+d
所以a+b+c+d=(1000*a+100*b+10*c+d)-(999*a+99*b+9*c)='abcd'-9*(111*a+11*b+c) 就相当于a+b+c+d=num%9
如果num是9的倍数怎么办呢?num是0怎么办呢?
9的倍数的各位数的和就是9,而此时num%9==0,所以直接使用9*bool(num)
最后一个or 把句子缩写到一行,leecode大神写的代码真是太优雅了