Category: 程序设计
江湖传言, SP小于500, 你在点赞的时候是看不到这个条的: 如果看不到条, 你的点赞是100%的, 在 steemd 上查询是这样的: 但是我通过程序来验证了一下: def vote(id, key, url, score = 100.0): wif = { "posting": key } try: steem = Steem(keys=wif) return(steem.vote(url, score, id)) …
今天我们要来讲一讲递归. 递归就是函数自己调用自己, 我们可以定义一个过程, 然后这只海龟不停的画, 结束的时候再调用自身再继续画. 再次调用的时候参数变化了, 至到参数满足一定的条件则停止. 比如 下面定义的这个过程可以用来画一个实现的正方形. TO FK :B IF :B>15 ; 如果边长大于15就停止 REPEAT 4 ; Draw a square with side B 画一个长度为B的正方形 FK :B+1 ; …
上次说到, LOGO语言几个最基本的命令, 就是前进FD后退BK向左转LT向右转RT. 参数都是可以支持负数的, 也就是说 FD 100 相当于 BK -100 (向前走100步等于向后退 负的100步). 今天讲的就是过程, 也就是我们编程语言里的函数. 在LOGO语言里定义过程的语法如下(LOGO语言中用分号开始定义行注释, 这个和汇编语言一样): TO 过程名 :参数1 :参数2 ; 过程的代码 END 参数是可选的, 比如: TO SQUARE REPEAT 4 …
I think the LOGO turtle graphic is the best introductory programming language for the kids. LOGO has ranked 49 according to the TIOBE (August, 2017). The turtle can be …
先来看看这一天书: 我告诉你, 这是一段程序, 执行后输出结果是 steemit @justyy 你是不是有点蒙? 是的, 这是一种只有8种字符组成的编程语言, 名字叫 BrainFuck 直译为(自己看吧) 我们先来看看这8种字符是什么. 假设有一个长度无限的数组, 每个数组里存放的一个数字. 大于号: 相当于 ++ptr 把数据指针往右移一格 小于号: 相当于 –ptr 把数据指针往左移一格 加号: 把指向的当前格数据值加1 相当于 ++*ptr 减号: 把指向的当前格数据值减1相当于 …
这两天又看到一个历史遗留下来写得很糟糕的代码. 这个代码大概是求两条线的夹角. 发现这代码是因为有一个单元测试不通过, DEBUG进来 发现是因为 Acos 函数在输入参数大于 1的时候返回 Nan, 浮点运算有误差返回了类似 1.00000012 之类的大于1但是却很靠近1的数值. 比如JS里: 最后面的解决方法是: Math.acos(Math.max(Math.min(1, x), -1)); 通过这种方法把参数强制规定在-1到1期间. 但是这样的代码并不优美. 如果精度要求更严格, 可以自定义一个数值类型的类, 分开用整数来保存整数部分和小数部分, 这样需要定义加减乘除的运算, 但是由于整数部分参加运算没有精度损失, 所以不会有这样的问题. 不过得小心处理像进位这样的问题. 通过这种方法把参数强制规定在-1到1期间. 但是这样的代码并不优美. 如果精度要求更严格, …
在代码出现性能瓶颈的时候,我们通常使用性能评估软件也就是Profiler 来查看代码中到底是哪几行,或者哪几个模块比较耗资源(速度慢或者占内存). 最近我就用 Profiler 跑了一下,发现我写了几处无用的代码.具体如下: 每行代码左边那个数字是被调用的次数,中间是执行时间(毫秒),右边是子函数的执行时间.我红色标出来的执行次数都是 1498179,而在进入这个函数的前几行都是在判断,如果条件不符合就立马退出函数,避免继续往下执行而导致程序崩溃(数组访问越界等). 但是明显来说,这几行代码都没有起作用.删掉这几行代码能省下2-3秒的执行时间.其实这种编程风格是 “Defensive Programming” 也就是处处加些判断(比如判断对像是否为 null)而不让程序崩溃.但实际上并不推荐,因为最好是一遇到错误就立即抛出异常,这样可以让我们更早的知道潜在的问题,而不是隐藏错误. 英文: The profiler told me I wrote some useless code (An Example of Defensive Programming) 本文一共 305 …