Angle=(float)((short到int类型转换)(0xFC<<8)|0x88)/10.0=-88.8°


你好!这里是九月初夏的 《Think Python》作業本 !在这里我将记录自己《Think Python》的章节练习和解题思路希望能和你一起度过奇妙的编程初见之旅~ 为了便于寻找和我自己区分,我给每个習题都取了个名字 《Think Python:如何像计算机科学家一样思考》第二版(基于Python 3),各大购书平台有售当然便于写作业的时候“誊抄”题目,我找到了一本双语PDF(作者让这本书基于GNU自由文档许可协议“开源”了但是该版本部分习题和纸书不同),来自哈尔滨工业大学 渠道是中國大学MOOC。 参考答案建议还是以 为准这里主要存放的还是我的个人答案和解题感悟,当然因为是编程初见很有可能出现 无法求解 的情况,你有可能看到的是无法正确实现题目要求的代码当然,如果发生这种情况我会再放一份官方代码研究并 分析原因、总结规律 ,当然唏望这种情况不要发生_(:зゝ∠)_ 还有就是一些没有官方答案的题目我也不能保证100%正确_(:зゝ∠)_

  

练习 1-1:在交互模式中故意犯错(1)

 
 
 
 

因为 CSDN 的 Markdown 文字兩侧连打2个下划线是加粗,所以main的前面多了个空格(强迫症勿怪)

【习题 4.1.2】 在 4.7 节中的 arc 函数并不准确因为使用多边形模拟近似圆,总是会茬真实的圆之外因此,Turtle 画完线之后会停在偏离正确的目标几个像素的地方我的解决方案里展示了一种方法可以减少这种错误的效果。閱读代码并考虑是否合理如果你自己画图,可能会发现它是如何生效的
【求解】 先对比代码有何不同

《练习 4-1》示例代码给出的解决方案是“在画圆前轻微左偏”,理由是“错误是由弧的线性相似导致的”

关于 弧的线性相似误差

《Think Python》又名《重拾三角函数》。 由于本人脫离学校太久总之根据本人已经没法证明的三角函数求极限理论,当近似圆中每个小三角夹角足够小的时候近似圆就越接近圆,真实嘚圆并不完全在近似圆之内或之外真实圆的弧不停的跨过近似圆的边,像这样:


这种近似圆与真实圆的误差会导致多边形的角在真实圆の外即每当开始或停止画直线的时候,乌龟会停在多边形的角上即真实圆之外。

 

我将 arc 函数引用的 polyline 函数中的 for 循环展开了可以先看出来處理方案的 arc 函数是先左转半个 step_angle 的角度,再画一个 完整的 近似圆画完后再讲乌龟右转半个 step_angle 归位:
老实说我并不觉得这种 “再画圈前稍微左轉一点点(making a slight left turn before starting reduces)”的骚操作除了让画出的近似圆比之前的右偏半个 step_angle 对于画出的多边形本身并没有任何影响,为何作者会认为这种操作减小了誤差呢虽然作者说了“如果你自己画图,可能会发现它是如何生效的”但是我画了更理解不了……

我打算写完第四章作业后,发个帖孓找人问问如果有大佬指点的话,会更新在这里我回来了…… 在做【练习 4-4:字母表】时发现,如果删除掉


 

当你在画J的时候如果先画┅竖,再左移直径画一个半圆你会发现,根本接不上……


 
 
 
 

说明 t.lt(step_angle/2) 转的微小角度才是正确的不转所画的弧线虽然尺寸没问题,但是位置以起点为中心左偏了 t.lt(step_angle/2) 角度
加上这两行代码(解除注释)后:


仔细想了下函数 arc(t, r, angle) 的画法,如果开头不左转 t.lt(step_angle/2) 的话相直线向下画第1笔,再开始“轉一个小角度 - 再画一笔”的循环:
这就造成了一个问题:终点没有跟起点水平(没有 t.lt(step_angle/2) 的终点是红色有 t.lt(step_angle/2) 的终点是绿色),造成了这种效果:
仔细想了一下数学原因是:由于我们是用很短的直线模拟的曲线,起点和终点的切线斜度就是第一根线和最后一根线的斜度第一根矗线的斜度是0、最后一根切线的斜度是 cot(step_angle),没办法像真正的弧线一样做到起点和终点的切线斜度相同故需要匀一下,让起点多 step_angle/2终点少 step_angle/2。

練习 4-2 用函数画花朵

写一组合适的通用函数用来画出下图所示的花朵图案(最终代码执行效果图):


 

可以画出花瓣的一条弧,还需要要转┅个角度再画出同样的一条弧这个角度是花瓣尖角,两条弧相交点的切线夹角由于花瓣尖角里外相同,每个花瓣尖角也相同故这个婲瓣尖角是根据花瓣数量平分 n360°?,转角是花瓣尖角的补角

2n实际上是画一个花瓣为 n 且不重叠的花朵,转半个花瓣尖转角度数(angel = 180 - 360.0/m)再画一朵完全一样的花朵:
 
l:花瓣的长度(花朵的直径)

练习 4-3 用函数画雨伞

写一组合适的通用函数用来画出下图所示的图形(最终代码执行效果图):

【求解】不得不说,练习 4-3 比 练习 4-2 简单多了!!!Step.1 确认组件 n 个等腰三角形组成“雨伞”

练习 4-4 用函数画大写字母表

字母表中的字母可以使用一些基本元素来构成如横线、竖线以及一些曲线。设计一个字母表可以使用最少的基本元素画出来,并且编写函数来画出字母

【求解】这道题教会我最重要的一件事是:用完东西要放回原处。 虽然这么简单的一个道理父母从小就教,但是我根本没care常用的东西放在显眼的地方,不常用的东西就随缘了到用的时候再找。


}

我要回帖

更多关于 short到int类型转换 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信