1.Mahony姿态解算算法笔记(一)
2.2020-07-21
3.音视频开发项目:H.265播放器:视频解码篇
4.综合评价与决策——主成分分析(PCA)法(附Python源码)
5.ç®å好ç©çç¼ç¨ä»£ç ï¼
6.pythonç¼ç¨è½¯ä»¶ç®ä»(常ç¨pythonç¼ç¨è½¯ä»¶)
Mahony姿态解算算法笔记(一)
本文使用 Zhihu On VSCode 创作并发布
mahony 算法是常见的姿态融合算法,将加速度计,码分磁力计,量法理陀螺仪共九轴数据,本原融合解算出机体四元数,分量法源该算法可到其网站下载源码 x-io.co.uk/open-source-...
该篇仅介绍融合加速度计和陀螺仪的码分十三水记牌器源码六轴数据算法,由于笔者水平有限,量法理文中难免存在一些不足和错误之处,本原诚请各位批评指正。分量法源
首先,码分姿态解算中的量法理姿态实际上值得是机体坐标系与地理坐标系的旋转关系。其常用描述形式有三种:欧拉角,本原方向余弦矩阵,分量法源四元数。码分
四元数的量法理定义与复数非常类似,唯一的区别是复数只有一个虚部,而四元数一共有三个。所有的四元数 q ∈ H (H代表四元数的发现者William Rowan Hamilton)都可以写成下面这种形式:
其中:
与复数类似,四元数就是基{ 1,i,j,k}的线性组合,同样的,四元数也可以写成向量形式:
另外的,我们也可以将实部与虚部分开,即通过一个三维向量表示虚部,自制bbs源码从而将四元数表示为标量与向量的有序对形式:
四元数的加减运算与标量乘法同复数类似,只需将分量各自运算即可。与复数相同,四元数的标量乘法同样遵循交换律,即[公式],其中s为标量。
四元数乘法较为特殊,并不遵循交换律,也就是说在一般情况下[公式]。如果有两个四元数[公式] 和 [公式] ,由 [公式] 可得其乘积为:
写成矩阵形式则有:
这个矩阵变换相当于左乘[公式],由于四元数不符合交换律,所以右乘[公式]的变换是一个不同的矩阵:
与复数相似,实部为0的四元数被称之为纯四元数,空间中的三维向量可以用纯四元数的形式表示,这种表示方法在四元数表示旋转的推导过程中有重要应用。
定义模长为1的四元数为单位四元数,用于表示旋转的四元数一定为单位四元数。
该部分省略推导过程,具体可以参考 krasjet.github.io/quate...
利用四元数表示旋转的定理,任意向量v 绕着以单位向量定义的旋转轴 u 旋转 θ 度后的 v' 可以使用四元数乘法来获得四元数旋转公式:
其中:
通过罗德里格旋转,我们可以推导出四元数表示旋转的一般形式,即三个四元数相乘,通过四元数乘法的矩阵表示形式,我们可以将四元数旋转公式表示为矩阵形式:
任意向量v 沿着以单位向量定义的08小说源码旋转轴 u 旋转 θ 角度后的 v' 可以使用矩阵乘法来获得:
同样也是将向量从机体坐标系b 到大地坐标系 R 的姿态矩阵 [公式](也称为坐标转换矩阵)即为:
这里再给出从大地坐标系R 转换到机体坐标系 b 的坐标转换矩阵 [公式]
其中:
对应四元数为:
也可写成有序数对形式,即2.1旋转公式中的:
得到四元数后,可以通过四元数的值反解出机体坐标系的欧拉角,同样的这里省略推导过程直接给出公式:
求解该微分方程即可得到当前四元数的值。但计算机中的计算是离散的,所以我们需要对该微分方程进行离散化处理,这样才可以有效的通过单片机或其他数字控制器进行求解:
首先,对于六轴数据,计算角度有两种方法,一种是通过对角速度积分得到角度,另一种则是通过对加速度进行正交分解得到角度。但这两种方式均存在不足,通过角速度积分得到角度时,角速度的误差会在积分过程中被不断放大从而影响数据准确性。而加速度计是一种特别敏感的传感器,电机旋转产生的震动会给加速度计的数据中带来高频噪声。
通过融合两种数据以获得准确姿态,这里通过加速度计补偿角速度。设有大地坐标下的重力加速度g,把 g 通过姿态矩阵(坐标转换矩阵)的逆(意味着从地理坐标系 R 到机体坐标 b 系)变换到机体坐标系,得到其在机体坐标系下的**理论重力加速度向量 [公式] **,则两者的变换关系可通过前文给出的姿态矩阵得出:
不难看出,将重力加速度向量变换至机体坐标系后,恰好是矩阵的最后一列。这样一来,我们就得到了由描述刚体姿态的atom源码分析四元数推导出的理论重力加速度向量 [公式] 。另外,我们还可以通过加速度计测量出实际重力加速度向量 [公式] 。
这里的理论重力加速度向量[公式] 和实际重力加速度向量 [公式] 之间必然存在偏差,而这个偏差很大程度上是由陀螺仪数据产生的角速度误差引起的,所以根据理论向量和实际向量间的偏差,就可以补偿陀螺仪数据的误差,进而解算出较为准确的姿态,即将隐含在四元数中的角速度误差显化。
理论重力加速度向量和实际重力加速度向量均是向量,反应向量间夹角关系的运算有两种:内积(点乘)和外积(叉乘),考虑到向量外积模的大小与向量夹角呈正相关,故通过计算外积来得到向量偏差[公式]:
在进行叉乘运算前,应先将理论向量[公式] 和实际向量 [公式] 做单位化处理,有:
考虑到实际情况中理论向量[公式] 和实际向量 [公式] 偏差角不会超过°,而当[公式]在±°内时,[公式] 与[公式]的值非常接近,因此上式可进一步简化为:
得到向量偏差后,即可通过构建PI补偿器来计算角速度补偿值:
其中,比例项用于控制传感器的“可信度”,积分项用于消除静态误差。[公式]越大,意味着通过加速度计得到误差后补偿越显著,即是越信任加速度计。反之[公式]越小时,加速度计对陀螺仪的员工画像源码补偿作用越弱,也就越信任陀螺仪。而积分项则用于消除角速度测量值中的有偏噪声,故对于经过零篇矫正的角速度测量值,一般选取很小的[公式]。最后将补偿值补偿给角速度测量值,带入四元数差分方程中即可更新当前四元数。
考虑到四元数不具备直观几何意义,故最后还需通过四元数反解出欧拉角。这里直接套用上文给出的公式即可:
回到欧拉角的计算,最终通过四元数反解出欧拉角,完成姿态解算过程。
本文仅介绍了基于四元数的mahony姿态解算算法的主要原理与步骤,包括四元数的定义与性质、四元数表示姿态与旋转、传感器数据融合以及姿态解算的具体方法。通过融合加速度计和陀螺仪的数据,利用四元数表示机体坐标系与大地坐标系之间的旋转关系,实现姿态的准确估计。在传感器数据融合部分,通过理论重力加速度向量与实际重力加速度向量的偏差来补偿陀螺仪的角速度误差,提高姿态估计的准确性。最后,通过四元数反解欧拉角,完成姿态解算的全过程。在实际应用中,还需要根据具体情况进行算法的优化与调整,以满足不同场景的需求。
--
主æååæï¼PCAï¼æ¯ä¸ç§æ°æ®éç»´åå»é¤ç¸å ³æ§çæ¹æ³ï¼å®éè¿çº¿æ§åæ¢å°åéæå½±å°ä½ç»´ç©ºé´ã对åéè¿è¡æ影就æ¯å¯¹åéå·¦ä¹ä¸ä¸ªç©éµï¼å¾å°ç»æåéï¼å¨è¿éï¼ç»æåéçç»´æ°å°äºåå§åéçç»´æ°ãéç»´è¦ç¡®ä¿çæ¯å¨ä½ç»´ç©ºé´ä¸çæå½±è½å¾å¥½å°è¿ä¼¼è¡¨è¾¾åå§åéï¼å³éæ误差æå°åã
æ ¸å¿çé®é¢çå¦ä½å¾å°æå½±ç©éµï¼åå ¶ä»çæºå¨å¦ä¹ ç®æ³ä¸æ ·ï¼å®éè¿ä¼åç®æ å½æ°å¾å°ãé¦å èèæç®åçæ åµï¼å°åéæå½±å°ä¸ç»´ç©ºé´ï¼ç¶åæ¨å¹¿å°ä¸è¬æ åµã
å设æ n 个 d ç»´åé X i ï¼å¦æè¦ç¨ä¸ä¸ªåé X 0 æ¥è¿ä¼¼ä»£æ¿å®ä»¬ï¼è¿ä¸ªåéåä»ä¹å¼çæ¶åè¿ä¼¼ä»£æ¿ç误差æå°ï¼å¦æç¨åæ¹è¯¯å·®ä½ä¸ºæ åï¼å°±æ¯è¦æå°åå¦ä¸å½æ°ï¼
æ¾ç¶é®é¢çæä¼è§£æ¯è¿äºåéçåå¼ï¼
è¯æå¾ç®åã为äºæ±ä¸é¢è¿ä¸ªç®æ å½æ°çæå°å¼ï¼å¯¹å®çæ±æ¢¯åº¦ï¼æ±å¯¼ï¼å¹¶ä»¤æ¢¯åº¦çäº0ï¼å¯ä»¥å¾å°
解è¿ä¸ªæ¹ç¨å³å¯å¾å°ä¸é¢çç»è®ºãåªç¨åå¼ä»£è¡¨æ´ä¸ªæ ·æ¬éè¿äºç®åï¼è¯¯å·®å¤ªå¤§ãä½ä¸ºæ¹è¿ï¼å¯ä»¥å°æ¯ä¸ªåé表示æåå¼åéåå¦å¤ä¸ä¸ªåéçåï¼
å ¶ä¸ï¼e为åä½åéï¼ai æ¯æ éãä¸é¢è¿ç§è¡¨ç¤ºç¸å½äºæåéæå½±å°ä¸ç»´ç©ºé´ï¼åæ å°±æ¯ai ãå½eåaiåä»ä¹å¼çæ¶åï¼è¿ç§è¿ä¼¼è¡¨è¾¾ç误差æå°ï¼
è¿ç¸å½äºæå°åå¦ä¸è¯¯å·®å½æ°ï¼
å°ä¸é¢æ±å¾çaiå¸¦å ¥ç®æ å½æ°ä¸ï¼å¾å°åªæåéeçå½æ°ï¼
ä¸å¼çååé¨ååeæ å ³ï¼ç±äºeæ¯åä½åéï¼å æ¤æ ||e||=1 ç约æï¼è¿ä¸ªçº¦ææ¡ä»¶å¯ä»¥åæe T e=1ãæ们è¦æ±è§£çæ¯ä¸ä¸ªå¸¦çå¼çº¦æçæå¼é®é¢ï¼å¯ä»¥ä½¿ç¨ææ ¼ææ¥ä¹æ°æ³ãæé ææ ¼ææ¥å½æ°ï¼
å æ¤ï¼è¿ä¸ªç©éµåæ£å®ãè¿ééè¦æ大å e T Se çå¼ï¼ç±äº
å æ¤ï¼ 为æ£åº¦ç©éµæ大çç¹å¾å¼æ¶ï¼ e T Se ææ大å¼ï¼ç®æ å½æ°åå¾æå°å¼ãå°ä¸è¿°ç»è®ºä»ä¸ç»´æ¨å¹¿å° d' ç»´ãæ¯ä¸ªåéå¯ä»¥è¡¨è¾¾æ
å¨è¿é e i æ¯åä½åéã误差å½æ°åæ
å¯ä»¥è¯æï¼ä½¿å¾è¯¥å½æ°åæå°å¼ç e j 为æ£åº¦ç©éµæ大çd'个ç¹å¾å¼å¯¹åºçåä½é¿åº¦ç¹å¾åéï¼å³æ±è§£ä¸é¢çä¼åé®é¢ï¼
å ¶ä¸ï¼ tr 为ç©éµç迹ãç©éµWçå e j æ¯è¦æ±è§£ç迹çåºåéãæ£åº¦ç©éµæ¯å®å¯¹ç§°ç©éµï¼å±äºä¸åç¹å¾å¼çç¹å¾åéç¸äºæ£äº¤ãåé¢å·²ç»è¯æè¿ä¸ªç©éµåæ£å®ï¼ç¹å¾å¼éè´ãè¿äºç¹å¾åéææä¸ç»åºåéï¼å¯ä»¥ç¨å®ä»¬ç线æ§ç»åæ¥è¡¨è¾¾åé x ãä»å¦å¤ä¸ä¸ªè§åº¦æ¥çï¼è¿ç§åæ¢å°åæ¹å·®ç©éµå¯¹è§åï¼ç¸å½äºå»é¤äºååéä¹é´çç¸å ³æ§ã
ä»ä¸é¢çæ¨å¯¼è¿ç¨å¯ä»¥å¾å°è®¡ç®æå½±ç©éµçæµç¨å¦ä¸ï¼
ï¼1ï¼è®¡ç®æ ·æ¬éçåå¼åéï¼å°ææåéåå»åå¼ï¼è¿æ为ç½åï¼
ï¼2ï¼è®¡ç®æ ·æ¬éçåæ¹å·®ç©éµï¼
ï¼3ï¼å¯¹åæ¹å·®ç©éµè¿è¡ç¹å¾å¼å解ï¼å¾å°ææç¹å¾å¼ä¸ç¹å¾åéï¼
ï¼4ï¼å°ç¹å¾å¼ä»å¤§å°å°æåºï¼ä¿çæ大çä¸é¨åç¹å¾å¼å¯¹åºçç¹å¾åéï¼ä»¥å®ä»¬ä¸ºè¡ï¼å½¢ææå½±ç©éµã
å ·ä½ä¿çå¤å°ä¸ªç¹å¾å¼ç±æå½±åçåéç»´æ°å³å®ã使ç¨åæ¹å·®ç©éµå使ç¨æ£åº¦ç©éµæ¯çä»·çï¼å 为åè æ¯åè ç n åï¼èç©éµ A å nA æç¸åçç¹å¾åéã
å¾å°æå½±ç©éµä¹åå¯ä»¥è¿è¡åééç»´ï¼å°å ¶æå½±å°ä½ç»´ç©ºé´ãåéæå½±çæµç¨å¦ä¸ã
ï¼1ï¼å°æ ·æ¬åæåå¼åéã
ï¼2ï¼å·¦ä¹æå½±ç©éµï¼å¾å°éç»´åçåéã
åééæææ ¹æ®æå½±åçåééæåå§åéï¼ä¸åéæå½±çä½ç¨åè¿ç¨ç¸åãåééæçæµç¨å¦ä¸ã
ï¼1ï¼è¾å ¥åéå·¦ä¹æå½±ç©éµç转置ç©éµã
ï¼2ï¼å ä¸åå¼åéï¼å¾å°éæåçç»æã
ä»ä¸é¢çæ¨å¯¼è¿ç¨å¯ä»¥çå°ï¼å¨è®¡ç®è¿ç¨ä¸æ²¡æ使ç¨æ ·æ¬æ ç¾å¼ï¼å æ¤ï¼ä¸»æååææ¯ä¸ç§æ çç£å¦ä¹ ç®æ³ãé¤äºæ åç®æ³ä¹å¤å®è¿æå¤ä¸ªåç§ï¼å¦ç¨ç主æååæãæ ¸ä¸»æååæãæ¦ç主åéåæçã
æºç 讲解è§é¢é¾æ¥
音视频开发项目:H.播放器:视频解码篇
探索音视频开发的前沿技术,让我们深入剖析一款H.播放器的视频解码优化过程。在这款高性能播放器中,新版以惊人的效率展示了其解码能力,1分钟内处理p/fps的H. MP4视频,内存占用仅为4.6GB,而CPU占用率在极限条件下也保持在+。单帧解码p的速度已经优化到了惊人的毫秒,相较于旧版p的毫秒,无疑展示了技术的飞跃。
播放器的架构设计巧妙,由Loader、Demuxer、Renderer(核心模块)和UI View等模块构成,各部分独立却又协同工作。让我们走进DEMO架构示例:Loader负责从Annex-B码流中读取数据,WASM技术则高效地解码YUV数据,而FFmpeg经过精简编译后,被转化为轻量级的WASM包,实现资源优化。
要实现这一优化,首先从FFmpeg官网获取emsdk和源码版本(4.1),然后通过定制的make_decoder.sh脚本,去除不必要的模块,如swresample和postproc,专注于关键的hevc-decoder模块。这个过程包括禁用非必要的FFmpeg功能,生成简化库和.h文件,为后续的WASM编译做准备。
接下来,编写自定义的C语言入口文件(如decoder.c),运用C语言基础,创建一个初始化解码器的接口,如init_decoder,它接受一个JS回调函数,传递解码数据的地址、长度,以及可选的时间戳(pts)。附赠的学习资料包,包含FFmpeg、webRTC等技术,可通过企鹅裙获取,助你快速上手。
解码的核心在于处理AVPacket和AVFrame,视频中每个压缩帧需要通过demuxers和decoders逐一解析。decode_buffer函数负责数据解析和解码,将解码后的AVPacket传递给解码器,可能需要多次循环以接收完整的AVFrame。而在3.x和4.x版本中,avcodec_send_packet和avcodec_decode_video2/avcodec_decode_audio4的调用方法有所不同。
解码后的YUV数据通常以紧缩格式(如YUVp)和平面格式存储,需要转换后供JS使用。在这个过程中,采样率决定了数据处理的复杂度,例如4个Y分量对应1个U和V分量。将解码后的AVFrame复制到yuv_buffer,然后通过decoder_callback传递给JavaScript。
通过Emscripten构建WASM包,我们编写build_decoder.sh脚本,设置出口函数和内存配置,最终生成wasm/libffmpeg.js。在JS和Worker中,我们加载并调用WASM函数,构建Decoder类,扩展EventEmitter,处理数据的异步加载和解码。在主线程中,通过webpack和worker-loader,数据从主线程传输到Worker,解码器负责解码并返回处理后的数据。
H.视频解码的挑战在于高效处理AVPacket和AVFrame,音频解码则可能需要复用解码链路或者利用浏览器内置的解码器。音频播放则依赖于AudioContext,确保主流音频编码格式在浏览器中的兼容性。通过这个案例,我们了解了如何避免常见问题,以及FFmpeg在视频处理中的强大能力。H.播放器的应用场景广泛,为创新提供无限可能。
综合评价与决策——主成分分析(PCA)法(附Python源码)
本文探讨了综合评价与决策过程中的主成分分析(PCA)法,其核心在于量化评价对象的相对优劣。具体做法如下:
首先,考虑有n个评价对象,每个对象被分配到m个评价属性上,形成决策矩阵。矩阵中的每个行向量代表一个评价对象。
主成分分析(PCA)的核心思想是通过线性组合,最大化各分量的方差之和。其具体步骤包括数据预处理、计算相关系数矩阵的特征值与特征向量,以及计算评分模型。
在数据预处理阶段,将所有属性标准化,形成标准决策阵。
接着,计算相关系数矩阵的特征值与特征向量,特征向量构成旋转坐标系,使各分量方差之和最大化。
通过计算主成分贡献率与累积贡献率,确定前k个主成分,其中k通常设为使累积贡献率达到0.9的值。这k个主成分的线性组合得到最终评分模型。
应用实例中,以我国-年宏观投资效益数据为例,通过PCA法,得到评分向量,从而对这些年的投资效益进行排序。
附Python源码,用于实现上述PCA过程的完整步骤。
参考文献提供了理论基础,包括数学建模算法与应用、机器学习等领域的相关内容。
ç®å好ç©çç¼ç¨ä»£ç ï¼
ç«é ·çç¼ç¨ä»£ç
ç«é ·çç¼ç¨ä»£ç æ¯@echooffmodeconcols=lines=colorsetlocalenabledelayedexpansionsetcode=abcdefsetm=1setv=1ã
ç¼å®ç¨åºï¼ç®ç§°ç¼ç¨ï¼æ¯æ让计ç®æºä»£ä¸ºè§£å³æ个é®é¢ã对æ个计ç®ä½ç³»è§å®ä¸å®çè¿ç®æ¹å¼ï¼ä½¿è®¡ç®ä½ç³»æç §è¯¥è®¡ç®æ¹å¼è¿è¡ï¼å¹¶æç»å¾å°ç¸åºç»æçè¿ç¨ã
ç¼ç¨å°±æ¯ä¸ºäºåå©äºè®¡ç®æºæ¥è¾¾å°æä¸ç®çæ解å³æ个é®é¢ï¼è使ç¨æç§ç¨åºè®¾è®¡è¯è¨ç¼åç¨åºä»£ç ï¼å¹¶æç»å¾å°ç»æçè¿ç¨ã计ç®æºè½ç¶åè½åå强大ï¼å¯ä»¥ä¸ç½ãç©æ¸¸æã管çå ¬å¸äººäºå ³ç³»ççãä½æ¯æ²¡æç¨åºï¼å®å°±çäºæ¯ä¸å åºéï¼ä¸ä¼çä¼æ们对å®ä¸è¾¾çâå½ä»¤âã
ç¼ç¨è¯è¨ä»ç»
使ç¨æ±ç¼è¯è¨ç¼å计ç®æºç¨åºï¼ç¨åºåä»ç¶éè¦ååçæ计ç®æºç³»ç»ç硬件ç»æï¼æ以ä»ç¨åºè®¾è®¡æ¬èº«ä¸æ¥çä»ç¶æ¯ä½æççãç¦ççãä½æ£æ¯ç±äºæ±ç¼è¯è¨ä¸è®¡ç®æºç¡¬ä»¶ç³»ç»å ³ç³»å¯åï¼å¨æäºç¹å®çåºåï¼å¦å¯¹æ¶ç©ºæçè¦æ±å¾é«çç³»ç»æ ¸å¿ç¨åºä»¥åå®æ¶æ§å¶ç¨åºçï¼è¿ä»ä¸ºæ¢æ±ç¼è¯è¨ä»ç¶æ¯ååææçç¨åºè®¾è®¡å·¥å ·ã
使ç¨é«çº§è¯è¨ç¼åç¨åºçä¼ç¹æ¯ï¼ç¼ç¨ç¸å¯¹ç®åãç´è§ãæç解ãä¸å®¹æåºéãé«çº§è¯è¨æ¯ç¬ç«äºè®¡ç®æºçï¼å èç¨é«çº§è¯è¨ç¼åç计ç®æºç¨åºéç¨æ§å¥½ï¼å ·æè¾å¥½ç移æ¤æ§ã
å¨è®¡ç®æºåºç¨çåæï¼ç¨åºå使ç¨æºå¨çæ令系ç»æ¥ç¼å计ç®æºåºç¨ç¨åºï¼è¿ç§ç¨åºç§°ä¸ºæºå¨è¯è¨ç¨åºã
æ±è¡ç®åCè¯è¨ç¨åºä»£ç ï¼åºç¡ç就好
#includestdio.h
#includestdlib.h
#defineNUM
/*runthisprogramusingtheconsolepauseroraddyourowngetch,system("pause")orinputloop*/
//å泡æåºç®æ³
//åºæ¬ææ³ï¼æ¯è¾ç¸é»ç两个æ°ï¼å¦æåè æ¯åè 大ï¼åè¿è¡äº¤æ¢ãæ¯ä¸è½®æåºç»æï¼éåºä¸ä¸ªæªæåºä¸æ大çæ°æ¾å°æ°ç»åé¢ã
voidbubbleSort(int*arr,intn){
inti,j;
for(i=0;in-1;i++)
for(j=0;jn-i-1;j++){
//å¦æåé¢çæ°æ¯åé¢å¤§ï¼è¿è¡äº¤æ¢
if(arr[j]arr[j+1]){
inttemp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
//æå·®æ¶é´å¤æ度为O(n^2),å¹³åæ¶é´å¤æ度为O(n^2)ã稳å®æ§ï¼ç¨³å®ãè¾ å©ç©ºé´O(1)ã
//å级çå泡æåºæ³ï¼éè¿ä»ä½å°é«éåºæ大çæ°æ¾å°åé¢ï¼åä»é«å°ä½éåºæå°çæ°æ¾å°åé¢ï¼
//å¦æ¤åå¤ï¼ç´å°å·¦è¾¹çåå³è¾¹çéåãå½æ°ç»ä¸æå·²æåºå¥½çæ°æ¶ï¼è¿ç§æåºæ¯ä¼ ç»å泡æåºæ§è½ç¨å¥½ã
//å级çå泡æåºç®æ³
voidbubbleSort_1(int*arr,intn){
//设置æ°ç»å·¦å³è¾¹ç
intleft=0,right=n-1;
//å½å·¦å³è¾¹çæªéåæ¶ï¼è¿è¡æåº
while(left=right){
inti,j;
//ä»å·¦å°å³éåéåºæ大çæ°æ¾å°æ°ç»å³è¾¹
for(i=left;iright;i++){
if(arr[i]arr[i+1]){
inttemp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
right--;
//ä»å³å°å·¦éåéåºæå°çæ°æ¾å°æ°ç»å·¦è¾¹
for(j=right;jleft;j--){
if(arr[j+1]arr[j]){
inttemp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
left++;
}
}
intmain(intargc,char*argv[]){
intarr[NUM],i,j,temp;
printf("请è¾å ¥ä¸ªæ°ï¼\n");
for(i=0;iNUM;i++){
printf("请è¾å ¥ç¬¬(%d)个æ°ï¼",i+1);
scanf("%d",arr[i]);
}
printf("\nè¾å ¥å¦ä¸æåï¼\n");
for(i=0;iNUM;i++){
printf("%4d",arr[i]);
}/
*for(i=0;iNUM;i++){
for(j=i+1;jNUM;j++){
if(arr[i]arr[j]){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}*/
bubbleSort_1(arr,NUM);
/*printf("\nä»å°å°å¤§å¦ä¸æåï¼\n");
for(i=0;iNUM;i++){
printf("%4d",arr[i]);
}*/
printf("\nä»å¤§å°å°å¦ä¸æåï¼\n");
for(i=NUM-1;i=0;i--){
printf("%4d",arr[i]);
}
return0;
}
é便ç»æä¸ä¸ªç¼ç¨ä»£ç 带ææ谢谢main()?
{ ?
inti,j,k;?
printf("\n");?
for(i=1;i5;i++)ï¼*以ä¸ä¸ºä¸é循ç¯*/
for(j=1;j5;j++)
for(k=1;k5;k++)
{
if(i!=ki!=jj!=k)/*ç¡®ä¿iãjãkä¸ä½äºä¸ç¸å*/
printf("%d,%d,%d\n",i,j,k);
}?
}
1ã代ç 解éï¼ä»¥ä¸è¿æ®µä»£ç æ¯ç¨Cè¯è¨ååºæ¥ç代ç ï¼ä»æ解å³çé®é¢æ¯ï¼æ1ã2ã3ã4个æ°åï¼è½ç»æå¤å°ä¸ªäºä¸ç¸åä¸æ éå¤æ°åçä¸ä½æ°ï¼é½æ¯å¤å°ï¼?å¯å¡«å¨ç¾ä½ãåä½ã个ä½çæ°åé½æ¯1ã2ã3ã4ãç»æææçæåååå»?æä¸æ»¡è¶³æ¡ä»¶çæåã
2ãCè¯è¨ä»ç»ï¼Cè¯è¨æ¯ä¸é¨éç¨è®¡ç®æºç¼ç¨è¯è¨ï¼åºç¨å¹¿æ³ãCè¯è¨ç设计ç®æ æ¯æä¾ä¸ç§è½ä»¥ç®æçæ¹å¼ç¼è¯ãå¤çä½çº§åå¨å¨ã产çå°éçæºå¨ç 以åä¸éè¦ä»»ä½è¿è¡ç¯å¢æ¯æ便è½è¿è¡çç¼ç¨è¯è¨ã
3ãCè¯è¨çä¼ç¹ï¼ç®æ´ç´§åãçµæ´»æ¹ä¾¿ãè¿ç®ç¬¦ä¸°å¯ãæ°æ®ç»æ丰å¯ãCæ¯ç»æå¼è¯è¨ãCè¯æ³éå¶ä¸å¤ªä¸¥æ ¼ãç¨åºè®¾è®¡èªç±åº¦å¤§ï¼ä¸è¬çé«çº§è¯è¨è¯æ³æ£æ¥æ¯è¾ä¸¥ï¼è½å¤æ£æ¥åºå ä¹ææçè¯æ³é误ãèCè¯è¨å 许ç¨åºç¼åè æè¾å¤§çèªç±åº¦ãCè¯è¨ç¨åºçæ代ç è´¨éé«ï¼ç¨åºæ§è¡æçé«ï¼ä¸è¬åªæ¯æ±ç¼ç¨åºçæçç®æ 代ç æçä½ã¸%ã
4ãå ¶ä»ç¼ç¨è¯è¨ä»ç»ï¼Python(è±å½åé³:/?pa?θ?n/ç¾å½åé³:/?pa?θÉ?n/),æ¯ä¸ç§é¢å对象ç解éå计ç®æºç¨åºè®¾è®¡è¯è¨ï¼ç±è·å °äººGuidovanRossumäºå¹´åæï¼ç¬¬ä¸ä¸ªå ¬å¼åè¡çåè¡äºå¹´ãPythonæ¯çº¯ç²¹çèªç±è½¯ä»¶ï¼?æºä»£ç å解éå¨CPythonéµå¾ªGPL(GNU?GeneralPublicLicense)åè®®ãPythonè¯æ³ç®æ´æ¸ æ°ï¼ç¹è²ä¹ä¸æ¯å¼ºå¶ç¨ç©ºç½ç¬¦(whitespace)ä½ä¸ºè¯å¥ç¼©è¿ã
pythonæ趣çç¼ç¨ä»£ç class?Point:
row=0col=0def?__init__(self,?row,?col):self.row=row
self.col=col
def?copy(self):return?Point(row=self.row,?col=self.col)
#åå§æ¡æ¶
import?pygame
import?random
#åå§å
pygame.init()
W=
H=
ROW=
COL=
size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('è´ªåè')
bg_color=(,,)
snake_color=(,,)
head=Point(row=int(ROW/2),?col=int(COL/2))
head_color=(0,,)
snakes=[
Point(row=head.row,?col=head.col+1),Point(row=head.row,?col=head.col+2),Point(row=head.row,?col=head.col+3)]
#çæé£ç©
def?gen_food():
while?1:pos=Point(row=random.randint(0,ROW-1),?col=random.randint(0,COL-1))
#
is_coll=False
#æ¯å¦è·è碰ä¸äº
if?head.row==pos.row?and?head.col==pos.col:
is_coll=True#è身å
for?snake?in?snakes:
if?snake.row==pos.row?and?snake.col==pos.col:is_coll=True
break
if?not?is_coll:
breakreturn?pos#å®ä¹åæ
food=gen_food()
food_color=(,,0)
direct='left'#left,right,up,down
#
def?rect(point,?color):
cell_width=W/COLcell_height=H/ROWleft=point.col*cell_widthtop=point.row*cell_heightpygame.draw.rect(window,?color,
(left,?top,?cell_width,?cell_height)
)pass#游æ循ç¯
quit=True
clock=pygame.time.Clock()
while?quit:
#å¤çäºä»¶for?event?in?pygame.event.get():if?event.type==pygame.QUIT:
quit=Falseelif?event.type==pygame.KEYDOWN:
if?event.key==?or?event.key==:if?direct=='left'?or?direct=='right':
direct='up'elif?event.key==?or?event.key==:if?direct?==?'left'?or?direct?==?'right':
direct='down'elif?event.key==?or?event.key==:if?direct?==?'up'?or?direct?==?'down':
direct='left'elif?event.key==?or?event.key==:if?direct?==?'up'?or?direct?==?'down':
direct='right'#åä¸è¥¿eat=(head.row==food.row?and?head.col==food.col)#éæ°äº§çé£ç©if?eat:food?=?gen_food()
#å¤ç身å#1.æåæ¥ç头ï¼æå ¥å°snakesç头ä¸snakes.insert(0,?head.copy())#2.æsnakesçæåä¸ä¸ªå æif?not?eat:snakes.pop()
#移å¨if?direct=='left':head.col-=1
elif?direct=='right':head.col+=1
elif?direct=='up':head.row-=1
elif?direct=='down':head.row+=1
#æ£æµdead=False#1.æå¢if?head.col0?or?head.row0?or?head.col=COL?or?head.row=ROW:dead=True
#2.æèªå·±for?snake?in?snakes:if?head.col==snake.col?and?head.row==snake.row:
dead=Truebreakif?dead:print('æ»äº')
quit=False
#渲æââç»åºæ¥#èæ¯pygame.draw.rect(window,?bg_color,?(0,0,W,H))#è头for?snake?in?snakes:rect(snake,?snake_color)
rect(head,?head_color)rect(food,?food_color)#pygame.display.flip()#设置帧é¢ï¼é度ï¼clock.tick(8)#æ¶å°¾å·¥ä½
è¿æ¯ä¸ä¸ªç®æçè´ªåèç代ç ï¼è½ç¶ç»æç®åï¼ä½æ¯è¯¥æçåè½é½æ¯å®æ´çï¼å¯ç©æ§ä¹ä¸é
cè¯è¨ç¼ç¨çè±ä»£ç ç®åcè¯è¨ç¼ç¨çè±ä»£ç ç®åå¦ä¸ï¼
#include"stdlib.h"
#include"graphics.h"
#include"stdio.h"
#include"math.h"
#include"conio.h"
#definePI?3.
main()
{
intgdriver=DETECT,gmode,errorcode;
inta[],b[],x,y,c,r,i,j,t;
doublerad=0.0;
/*initializegraphicsandlocalvariables*/
initgraph(gdriver,gmode,"");
/*readresultofinitialization*/
errorcode=graphresult();
if(errorcode!=grOk)?/*anerroroccurred*/
{
printf("Graphicserror:%s/n",grapherrormsg(errorcode));
printf("Pleaseanykeytohalt:");
getch();
exit(1);?/*terminatewithanerrorcode*/
}
randomize();
for(;!kbhit();)
{
x=rand()%+;/*éæºä¸å¿åæ */
y=rand()%+;
for(r=0;r=8;r++?)?/*çè±ç大å°è®¾å®*/
{
for(i=0,rad=0.0;rad2*PI;rad+=0.)?/*设å®åæ */
{
a[i++]=x+(int)r**cos(rad);
b[i]=y+(int)r**sin(rad);
}
t=i;
for(i=1;it;i++)
{
c=rand()%+1;/*åç¹çé¢è²éæº*/
setcolor(c);/*åè½:å°å½åå¾å½¢å±å¹çå½åç¬ç»é¢è²ç½®ä¸ºcolor.*/
circle(a[i],b[i],1);/*a[i],b[i]为åå¿1为åå¾ç»å*/
}
delay();
delay();
cleardevice();
å½æ°å:cleardevice?
å?è½:æ¸ é¤å¾å½¢å±å¹?
ç¨?æ³:voidfarcleardevice(void);
}
}
getch();
closegraph();
å½æ°å:closegraph
å?è½:å ³éå¾å½¢ç³»ç»
ç¨?æ³:voidfarclosegraph(void);
}
åå§åçè±åæ°
voidInit(inti)
{
//åå«ä¸ºï¼çè±ä¸å¿å°å¾çè¾¹ç¼çæè¿è·ç¦»ãçè±ä¸å¿å°å¾çå·¦ä¸è§çè·ç¦»(xãy)两个åé
intr[]={ ,,,,,,,,,,,,};
intx[]={ ,,,,,,,,,,,,};
inty[]={ ,,,,,,,,,,,,};
/****åå§åçè±*****/
Fire[i].x=0;//çè±ä¸å¿åæ
Fire[i].y=0;
Fire[i].width=;//å¾ç宽
Fire[i].height=;//å¾çé«
Fire[i].max_r=r[i];//æ大åå¾
Fire[i].cen_x=x[i];//ä¸å¿è·å·¦ä¸è§è·ç¦»
Fire[i].cen_y=y[i];
Fire[i].show=false;//æ¯å¦ç»½æ¾
Fire[i].dt=5;//绽æ¾æ¶é´é´é
Fire[i].t1=timeGetTime();
Fire[i].r=0;//ä»0å¼å§ç»½æ¾
/****åå§åçè±å¼¹*****/
Jet[i].x=-;//çè±å¼¹å·¦ä¸è§åæ
Jet[i].y=-;
Jet[i].hx=-;//çè±å¼¹åå°æé«ç¹åæ
Jet[i].hy=-;
Jet[i].height=0;//åå°é«åº¦
Jet[i].t1=timeGetTime();
Jet[i].dt=rand()%;//åå°é度æ¶é´é´é
Jet[i].n=0;//çè±å¼¹éªçå¾çä¸æ
Jet[i].shoot=false;//æ¯å¦åå°
}
pythonç¼ç¨è½¯ä»¶ç®ä»(常ç¨pythonç¼ç¨è½¯ä»¶)
pythonç¼ç¨æ¯å¥
pythonç¼ç¨æ¯å¥
pythonç¼ç¨æ¯å¥ï¼Pythonæ¯ä¸ç§ä»£è¡¨ç®å主ä¹ææ³çè¯è¨ï¼Pythonå´èµ·æ´å 符åå¼åè çä¹ æ¯åå£å³ãä¸é¢æç»å¤§å®¶å享ä¸ä¸å ³äºpythonç¼ç¨æ¯å¥çç¸å ³ä¿¡æ¯ã
pythonç¼ç¨æ¯å¥1
ç¼ç¨è¯è¨é¢åPythonæ为äºä¸ä¸ªèç¼çæ°æï¼Pythonå´èµ·çåå ä¸å ¶æ¬èº«ç¹ç¹æå ³ï¼ä¹è®¸å®æ¯æ´å 符åå¼åè çä¹ æ¯åå£å³ãç°å¨æä¸ç§å£°é³è¯´Pythonå°ä¼è¶ è¶Javaæå ¨çææµè¡ç¼ç¨è¯è¨ã
è¿äºå¹´ï¼ç¼ç¨è¯è¨çåå±è¿ç¨å¾å¿«ï¼å¨åä¸å ¬å¸ãå¼æºç¤¾åºä¸¤è¡åéçå ±åæ¨å¨ä¸ï¼æ¶ç°åºè¯¸å¦GoãSwiftè¿ç±»åèµ·ä¹ç§ï¼å ¶ä¸æ为èç¼çæ¯Pythonã
ç¥åå¼åè ç½ç«Stackoverflowæ°ææåºï¼ä»è³å¹´ç¼ç¨è¯è¨Pythonæ为å¼åè 使ç¨å¢é¿æå¿«ç主æµç¼ç¨è¯è¨ï¼å ¶ä¸å¹´å¢é¿çè¾¾å°äº%ï¼ä¸ä¸¾è¶ è¿å æ¬JavaãC#ãPHPãC++å¨å çææåç±»ãå¦æ®é«çéå¢åå¸çä¸ä»½ãè°æ¥æ¥åãéå¯¹å ¨çæ°ååé«æ ¡å®ä¹ ççè°æ¥ä¸ï¼å½é®å°ä½ 认为âåªä¸ªè¯è¨å¨æªæ¥ä¼æ´éè¦âæ¶ï¼è¢«è°æ¥çãåä¼ç§å¹´è½»å¼åè ä¸%éäºPythonã
è¯è¨ç使ç¨è æ¯ä¸ç´è¢«èªä¸ºä¸çä¸æ¸¸âæºå¤´æ´»æ°´âçå¼åè ï¼å ¶éè¦ç¨åº¦ä»å大ç§æå·¨å¤´å ¬å¸æ¯å¹´ä¾è¡å¬å¼çå¼åè 大ä¼ä¸å¯è§ä¸æã对äºå¼åè 群ä½èè¨æéè¦çäºç©æ两个ï¼ä¸æ¯å¹³å°ï¼äºå°±æ¯ç¼ç¨è¯è¨ãç¼ç¨è¯è¨Python为ä»ä¹è½å¤è·å¾å ¨çä¼å¤å¼åè çéç?å®çå´èµ·ç»å¼åè ä¸ç带æ¥äºä»ä¹åå?
æåçä¸åæºäºå¥½çå¼å§
å¨ä¸»æµç¼ç¨è¯è¨å½ä¸ï¼Python并ä¸æ¯ä¸ä¸ªâæ°äººâï¼å®çåå²è¶ è¿å¹´ï¼ä½çæ£é£é¡ä¹æ¶å´æ¯æè¿å å¹´ï¼æ以âåèµ·ä¹ç§âç称å¼å®è³åå½ãPythonçèµ·æºæ¯å¹´ï¼å ¶åæè è·å °äººç¨åºååå¤èç½èå§åABCè¯è¨çå¯å计åå¼åä¸ä¸ªæ°çèæ¬è§£éå¨ï¼ç±æ¤è¿åºäºPython项ç®çèµ·ç¹ã
Pythonè½å¤çæ£é£é¡çåå ä¹ä¸æ¯æä¸ä¸ªå¥½çèµ·ç¹ãå®çèµ·æ¥å¾ç¨³ï¼é¿å¼äºçæçº çº·ï¼ä¸æä¸äºå¼æºè¿å¨ç顺é£è½¦ãå¨é£ä¸ªå¹´ä»£ï¼åä¸çæä¸ç´æ¯çé¨äºä»¶ï¼ä¸çå²ä¸ç¬¬ä¸ä¸ªè½¯ä»¶é¢åé大å®å¸ATTå伯å å©BSDçUnixçææ¡æå¾å¤©æå°æï¼è¯¥æ¡çç»å±ç´æ¥ä¿æäºBSDçå¼æºåæ¯ãLinuxçè¯ç以åéæä¸ççèªç±è½¯ä»¶è¿å¨ã
Pythonæåççæå½å±æ¯CWI(é¿å§æ¯ç¹ä¸¹çå½å®¶æ°å¦ä¸è®¡ç®æºç§ç å¦ä¼)ï¼è¿ä¸åå¤æ©å¹´å¨è¯¥æºæå·¥ä½æå ³ï¼åæ¥åå¤åéäºCNRI(ç»´åå°¼äºå·çå½å®¶åæ°ç ç©¶å ¬å¸)ï¼Pythonæå±è½¬ç§»è³æ¤ãé£æ¶èªç±è½¯ä»¶è¿å¨å·²ç»å¼å§ï¼å¨CNRIæé´åå¸ç1.6è³2.1å¤ä¸ªçæ¬ç`Python许å¯è¯æ¯ä¸ç§ä¸GPL并ä¸å ¼å®¹ä¸ç±»ä¼¼äºBSDçå¼æºè®¸å¯ï¼CNRIå åå°èªç±è½¯ä»¶åºéä¼çååéæ¾äºPythonçå许å¯è¯ï¼åå¤ç±æ¤ææ¡äºä¸»å¯¼æ并起èäºæ°ç许å¯è¯ãä»æ¹åäºå许å¯è¯ä¸GPLçä¸å ¼å®¹ï¼æ¤ä¸¾è·å¾äºèªç±è½¯ä»¶åºéä¼é¢åçèªç±è½¯ä»¶è¿æ¥å¥ãååæ¥åå¤åä»çå¢éæç«äºPython软件åºéä¼ï¼å°çæä¸è®¸å¯è¯ç½®äºå ¶ä¸ã
åå§äººåå¤èç½èå§çå¿æç¼å¯ä¸çµæ´»å¤äºä¸ºPythonæåçåå±è¥é äºè¯å¥½çç¯å¢ï¼å æ¬å 次æå±ç转移ãèµ·èæ°ç许å¯è¯ãæºæºå°ä¸èªç±è½¯ä»¶éµè¥æ¡æï¼æåå®å ¨èå ¥å¼æºç大潮ãè¿ä¸å为Pythonæ¤ååå¤å¹´ééæ¸æé¿ä¸ºä¸»æµç¼ç¨è¯è¨èµ¢å¾äºå¥æºã
â人çè¦çï¼æç¨Pythonâ并éä¸å¥æè¨
Pythonå´èµ·çåå ä¹äºä¸å ¶æ¬èº«ç¹ç¹æå ³ï¼æè 说ï¼å ¶é¿æç»´æ¤æ¼è¿å½¢æçç¬ç¹é£æ ¼è¿åäºå¤§å¤æ°å¼åè çå£å³ãå¨å¼åè 社群æµè¡çä¸å¥ç©ç¬â人çè¦çï¼æç¨Pythonâ(åè¯ä¸ºâLifeisshortï¼youneedPythonâ)ï¼è¿å¥çä¼¼æè¨çè¯å®é ä¸æ°æ°åæ äºPythonçè¯è¨ç¹æ§ä¸å ¶å¨å¼åè å¿éçä»·å¼åéã
é¤äºå 涵大å¤æ°ä¸»æµç¼ç¨è¯è¨çä¼ç¹(é¢å对象ãè¯æ³ä¸°å¯)ä¹å¤ï¼Pythonçç´è§ç¹ç¹æ¯ç®æä¼é ãæäºå¼åï¼ç¨å°½éå°ç代ç å®ææ´å¤å·¥ä½ã尽管Pythonæ¯ä¸ç§è§£éåè¯è¨ï¼ä¸ä¼ ç»çç¼è¯åè¯è¨ç¸æ¯éä½äºæºå¨æ§è¡æçï¼ä½æ¯å¤çå¨çå¤çéçä¸ç¯å¢éç(æ¯å¦ç½ç»ç¯å¢)çå·®å¼å¨å¤§å¤æ°åºæ¯ä¸å®å ¨æµæ¶äºä¸è¿°ä»£ä»·;çºç²é¨åè¿è¡æç带æ¥ç好å¤åæ¯æåäºå¼åæçï¼å¨è·¨å¹³å°çæ¶åæ é移æ¤åéæ°ç¼è¯ãæ以Pythonçæ¾èä¼ç¹å¨äºéæï¼å¯¹äºæ¶é´çãååå¿«çéæ±èè¨å°¤ä¸ºèä»»ã
Pythonæ强大çå°æ¹ä½ç°å¨å®ç两个å¤å·ä¸ï¼ä¸ä¸ªå«âå ç½®çµæ± âï¼å¦ä¸ä¸ªæ¯âè¶æ°´è¯è¨âãåè çæææ¯ï¼Pythonå®æ¹æ¬èº«æä¾äºé常å®åçæ å代ç åºï¼å æ¬é对ç½ç»ç¼ç¨ãè¾å ¥è¾åºãæ件系ç»ãå¾å½¢å¤çãæ°æ®åºãææ¬å¤çççã代ç åºç¸å½äºå·²ç»ç¼åå®ææå ä¾å¼åè 使ç¨ç代ç éåï¼ç¨åºååªééè¿å è½½ãè°ç¨çæä½æ段å³å¯å®ç°å¯¹åºä¸å½æ°ãåè½çå©ç¨ï¼ä»èçå»äºèªå·±ç¼å大é代ç çè¿ç¨ï¼è®©ç¼ç¨å·¥ä½çèµ·æ¥æ´åæ¯å¨âæ积æ¨âãé¤äºå ç½®åºï¼å¼æºç¤¾åºåç¬ç«å¼åè é¿æ为Pythonè´¡ç®äºä¸°å¯å¤§éç第ä¸æ¹åºï¼å ¶æ°éè¿è¶ å ¶ä»ä¸»æµç¼ç¨è¯è¨ï¼å¯è§Pythonçè¯è¨çæå·²ç¶ç¸å½å£®å¤§ã
âè¶æ°´è¯è¨âæ¯Pythonçå¦ä¸ä¸ªäº®ç¹ãPythonæ¬èº«è¢«è®¾è®¡æå ·æå¯æ©å±æ§ï¼å®æä¾äºä¸°å¯çAPIåå·¥å ·ï¼ä»¥ä¾¿å¼åè è½å¤è½»æ¾ä½¿ç¨å æ¬CãC++ç主æµç¼ç¨è¯è¨ç¼åç模åæ¥æ©å ç¨åºãå°±å使ç¨è¶æ°´ä¸æ ·æç¨å ¶ä»ç¼ç¨è¯è¨ç¼åç模åç²åè¿æ¥ï¼è®©æ´ä¸ªç¨åºåæ¶å ¼å¤å ¶ä»è¯è¨çä¼ç¹ï¼èµ·å°äºé»ååçä½ç¨ãæ£æ¯è¿ç§å¤é¢æçè§è²è®©Pythonè¿å å¹´å¨å¼åè ä¸çä¸å声é¹èµ·ï¼å 为äºèç½ä¸ç§»å¨äºèæ¶ä»£çéæ±éæ¥éåå¢ï¼å¤§éå¼åè äºéä¸ç§æéãææ·çå·¥å ·æ¥å©å ¶å¤çä¸æ¥ä¿±å¢çå·¥ä½ï¼Pythonåå±è³ä»çå½¢ææ£å¥½æ»¡è¶³äºä»ä»¬çæ¿æã
Pythonçå½±å
ä»ä¸¤ä¸ªèåç¼ç¨è¯è¨æè¡ç½ç«TIOBEåPYPLçææ°æ°æ®æ¥çï¼Javaä¸Pythonçæååå«ä½äºç¬¬1å第5ã第1å第2ãå ³äºä¸¤ä¸ªç½ç«çæè¡æºå¶æ们ä¸å¾èç¥ï¼ä½ä»å¼åè 社群çç¸å ³è¯è®ºä¸å¯ä»¥è®¤ä¸ºPYPLæ´è½åæ ç¼ç¨è¯è¨å¨å¼åè 群ä½ä¸çæµè¡ç¨åº¦ãä¸è®ºå¦ä½ï¼Pythonçå´èµ·å·²æ¯æ¯åº¸ç½®ççäºå®ï¼èå®ä¸é¢çåè¾åæ¯å¸¸å¹´å æ®æ¦å第1ï¼äºèç½ä¸ç§»å¨æ¶ä»£çå¨åJavaãä»Stackoverflowåå¤ä¸ªå¼æºç¤¾åºå ¬å¼çæ°æ®æ¥çï¼Pythonçç¨æ·æ°éå¢é¿å¾å¿«ï¼å¨ä»åä¸¤å¹´è¶ è¿Javaæä¸ºå ¨çææµè¡ç¼ç¨è¯è¨çå¯è½æ§é常ä¹é«ã
å¼å¾ä¸æçæ¯ï¼é£äºé¢æå½±ååç主æµç¼ç¨è¯è¨ï¼å ¶èåä¸è¬é½ç«çç§æå·¨å¤´å ¬å¸ï¼æ¯å¦Javaä¹äºç²éª¨æãC#ä¹äºå¾®è½¯ãObjecTIve-Cä¹äºè¹æãJavaä¹æ以常年第ä¸æ¯å ä¸ºå ¶åæ¶è¿å ä¹æ¯å®åå¹³å°ç御ç¨è¯è¨ï¼ä»¥ååçäºSunæ¶ä»£å½±ååçç·é¡¾ãPythonè½æ¾ä¸åº¦ä¸ºè°·æ使ç¨ï¼ä½Goè¯è¨é®ä¸åéçæ¶é´æ¨ç§»æå°éå·ãä¹å°±æ¯è¯´ï¼Pythonæäºæ²¡æ巨头ç«éç主æµç¼ç¨è¯è¨ï¼é£ä¹å®çå½±ååæ¯å¦ä½ç»´ç³»ç?为ä»ä¹è¿è½å¤ä¿æé«éæé¿å¹¶å½¢æèµ¶è¶ Javaä¹å¿?
æ们认为è¿ä¸Pythonå¤å¹´æ¥å®ç°è¾å¥½æ¡ä¾ä¸èç¨æ§æå ³ã使ç¨Pythonå¼åçç¥åæ¡ä¾ä¸ï¼å æ¬è±ç£ãæ壳ãç¥ä¹ãDropboxãEVE(ææåå¤)æ¯ä¸ä¸ªé½æ¯éé级产åï¼è¿è¯´æPythonè¯è¨æ¬èº«çåå±å·²æ¥è»å®åï¼æçæé«ç稳å®ä¸å¯é æ§ä¿è¯ã第äºæ¯Pythonçåºç¨èå´ï¼é¤äºæ¥å¸¸å·¥å ·åèæ¬ä¹å¤ï¼è¿éç¨äºWebç¨åºãGUIå¼åãæä½ç³»ç»ä¸é´ä»¶ãæå¡ç«¯è¿ç»´ççï¼è¿äºå¹´Pythonçä¸äºç¬¬ä¸æ¹åºå¨æºå¨å¦ä¹ ãç¥ç»ç½ç»æ¹é¢æ´»è·éå¡ï¼è¿ä¹ä¸ºè¯è¨æ¬èº«çæ¨å¹¿åæµè¡å åä¸å°ã
æåéè¦æåºçæ¯ï¼Pythonç¼ç¨ææ³å å«å¼ºççé»ç®±æç»´ï¼è¿æå³çå¼åè å°æå éè§æ¨¡åååæµæ°´çº¿å¼çç¼ç¨å·¥ä½ï¼äºå®ä¸è¿ä¹æ¯æªæ¥ä¸»æµç¼ç¨è¯è¨çåå±è¶åãéç计ç®æºè¯è¨çæ¼ååå¼åå·¥å ·éæåè½æ¥è¶å¼ºå¤§ï¼æªæ¥çç¼ç¨å·¥ä½å°å¤§å¹ ç®åãä»æç§è§åº¦çï¼Pythonæ´åæ¯å·²ç»âè¿å ¥æªæ¥âçç¼ç¨è¯è¨ï¼å ¶å¯¹å¼åè 群ä½ç»æååï¼ä»¥åæ°è¿å¼åè æ°éçæ¿å¢ï¼è¿äºå½±åé½å°æ¯æ·±è¿çã
pythonç¼ç¨æ¯å¥2
pythonçä½ç¨ï¼
1ãç³»ç»ç¼ç¨ï¼æä¾API(ApplicationProgramming
Interfaceåºç¨ç¨åºç¼ç¨æ¥å£)ï¼è½æ¹ä¾¿è¿è¡ç³»ç»ç»´æ¤å管çï¼Linuxä¸æ å¿æ§è¯è¨ä¹ä¸ï¼æ¯å¾å¤ç³»ç»ç®¡çåçæ³çç¼ç¨å·¥å ·ã
2ãå¾å½¢å¤çï¼æPILãTkinterçå¾å½¢åºæ¯æï¼è½æ¹ä¾¿è¿è¡å¾å½¢å¤çã
3ãæ°å¦å¤çï¼NumPyæ©å±æä¾å¤§éä¸è®¸å¤æ åæ°å¦åºçæ¥å£ã
4ãææ¬å¤çï¼pythonæä¾çre模åè½æ¯ææ£å表达å¼ï¼è¿æä¾SGMLï¼XMLåæ模åï¼è®¸å¤ç¨åºåå©ç¨pythonè¿è¡XMLç¨åºçå¼åã
5ãæ°æ®åºç¼ç¨ï¼ç¨åºåå¯éè¿éµå¾ªPythonDB-API(æ°æ®åºåºç¨ç¨åºç¼ç¨æ¥å£)è§èç模åä¸MicrosoftSQLServerï¼Oracleï¼Sybaseï¼DB2ï¼MySQLãSQLiteçæ°æ®åºéä¿¡ãpythonèªå¸¦æä¸ä¸ªGadfly模åï¼æä¾äºä¸ä¸ªå®æ´çSQLç¯å¢ã
æ©å±èµæï¼
pythonä¸æå°±æ¯èèçææãå¨è®¡ç®æºä¸ï¼å®æ¯ä¸ç§ç¼ç¨è¯è¨ãPythonï¼è±è¯åé³ï¼ï¼paθnï¼ï¼ï¼æ¯ä¸ç§é¢å对象ã解éå计ç®æºç¨åºè®¾è®¡è¯è¨ï¼ç±GuidovanRossumäºå¹´åºåæï¼ç¬¬ä¸ä¸ªå ¬å¼åè¡çåè¡äºå¹´ãPythonè¯æ³ç®æ´èæ¸ æ°ï¼å ·æ丰å¯å强大çç±»åºã
å®å¸¸è¢«æµç§°ä¸ºè¶æ°´è¯è¨ï¼å®è½å¤æç¨å ¶ä»è¯è¨å¶ä½çåç§æ¨¡åï¼å°¤å ¶æ¯Cï¼Cï¼ï¼ï¼å¾è½»æ¾å°èç»å¨ä¸èµ·ã常è§çä¸ç§åºç¨æ å½¢æ¯ï¼ä½¿ç¨Pythonå¿«éçæç¨åºçååï¼ææ¶çè³æ¯ç¨åºçæç»çé¢ï¼ï¼ç¶åå¯¹å ¶ä¸æç¹å«è¦æ±çé¨åï¼ç¨æ´åéçè¯è¨æ¹åã
æ¯å¦3D游æä¸çå¾å½¢æ¸²æ模åï¼æ§è½è¦æ±ç¹å«é«ï¼å°±å¯ä»¥ç¨C++éåã1åå±åç¨ç¼è¾èªä»ä¸çºªå¹´ä»£åPythonè¯è¨è¯çè³ä»ï¼å®éæ¸è¢«å¹¿æ³åºç¨äºå¤çç³»ç»ç®¡çä»»å¡åWebç¼ç¨ãPythonå·²ç»æ为æå欢è¿çç¨åºè®¾è®¡è¯è¨ä¹ä¸ã
pythonç¼ç¨æ¯å¥3
é¶åºç¡å¦pythonè¦è±å¤é¿æ¶é´ï¼
çæ¡ï¼ä¸¤å¤©ï¼å«ä¸ä¿¡ï¼å¬æç»ç»éæ¥
å¦ä½ä¸¤å¤©å¦ä¼pythonç¼ç¨å ¥é¨åºç¡è¯¾ç¨ï¼
æ-9æ1æ¥ï¼è¾å¨å¹è®å次走è¿ç¥åçµåå ¬å¸âæ导å½é ï¼ä¸ºå ¶å±å¼2天çPythonå ¥é¨è¯¾ç¨ã
æ导å½é ï¼MentorGraphicsï¼æ¯ä¸å®¶ä»äºçµå设计èªå¨åçè·¨å½å ¬å¸ãäºå¹´åç«ãå ¶æ»é¨ä½äºç¾å½ä¿ååå·çå¨å°æ£®ç»´å°ï¼Wilsonvilleï¼ã
è¾å¨å½é å¹è®(AvtechInstituteofTechnology)ï¼æºäºç¾å½ï¼å§äº.ä¸ä¸ä»äºä¼ä¸çº§å¨è人åæè½æå项ç®ç®¡çãIT管çãITææ¯ãäºè®¡ç®å¤§æ°æ®ãéæ±ç®¡çãä¿¡æ¯å®å ¨ä¸å®¡è®¡ï¼äº§å管çãpythonç¼ç¨å ¥é¨çå¹è®ä¸åç±»å½é 认è¯èè¯æä¾åãè¿å ¥ä¸å½å¹´æ¥ï¼å·²æ为ä¼å¤å¼ºä¼ä¸ï¼æ æ®ãå为ãæ æ®ãæ´å°ãIBMãä¸å ´ãé£å©æµ¦çï¼æå®çå¹è®ä¾åºåã
Pythonç¼ç¨å ¥é¨è¯¾ç¨é常éåé¶åºç¡çå¦çï¼ä¸åè¡ä¸éå¶ï¼å±äºpython认è¯çå级é¶æ®µè¯¾ç¨ã
è¾å¨å¹è®æ ¹æ®æ导çµåçéæ±å®å¶äºä¸¤å¤©çpythonå¹è®è¯¾ç¨ãå ¶ä¸»è¦å 容å æ¬è¯æ³åºç¡ãPythonç¨åºæµç¨æ§å¶ãPythonæ°æ®ç»æãPythonå½æ°çå级é¶æ®µçå 容ã
è¾å¨å¹è®python5年以ä¸èµæ·±è®²å¸ç¨è¯¾å ç论+å®éªçæ¹å¼ä¸ºæ导å½é å¹è®åå·¥çpythonå级æè½ãæ¯å¦è¯´å©ç¨pythonå¤ççµå½±å表ãå建èªå·±çåç±»æ 模åçã
å¦ä»¥è´ç¨ã以å¦ç为ä¸å¿ä¸ç´æ¯è¾å¨å¹è®çæå¡ç¹è²ãé¤æ¤ä»¥å¤ï¼è¾å¨å¹è®è¿æä¾èè¯æ¥åãåèè¯ãå¤ä¹ å¤èå¹è®ãæ¿è¯ä¸æ¡é¾æå¡ã
éè¿pythonç¼ç¨å ¥é¨è¯¾ç¨çå¹è®ï¼å¦ç们è½å¤ææ¡pythonç¼ç¨è¯è¨çåºç¡ç¥è¯ï¼è½å¤çæpythonè¯è¨ç¼åçåºç¨ç¨åºï¼è½å¤ç¼åç®åçåè½æ§ç¨åºï¼äºè§£pythonè¯è¨å¯ä»¥åºç¨çé¢å以åå±éæ§ã
å ¥é¨å¾éè¦ï¼èå¸æç好ï¼åºç¡æå®äºï¼æè½ä¸æ¥æ¥åæ°æ®ææä¸åæé«é¶è¯¾ç¨è¿è¿ï¼ä¸æ¥æ¥æ为æ°æ®åæé¢åç大çï¼
Pythonç¼ç¨éè¦ç¨ä»ä¹è½¯ä»¶Pythonç¼ç¨éè¦ç¨ä»¥ä¸å 个软件ï¼
1ãPycharmï¼PyCharmæ¯ä¸ç§PythonIDEï¼å¸¦æä¸æ´å¥å¯ä»¥å¸®å©ç¨æ·å¨ä½¿ç¨Pythonè¯è¨å¼åæ¶æé«å ¶æççå·¥å ·ï¼æ¯å¦è°è¯ãè¯æ³é«äº®ãProject管çã代ç 跳转ãæºè½æ示ãèªå¨å®æãåå æµè¯ãçæ¬æ§å¶ã
2ãIDLEï¼Idleæ¯ä¸ä¸ªçº¯Pythonä¸ä½¿ç¨Tkinterç¼åçç¸å½åºæ¬çIDEã
3ãIpythonï¼ipythonæ¯ä¸ä¸ªpythonç交äºå¼shellï¼æ¯é»è®¤çpythonshell好ç¨å¾å¤ã
å¦éå¦ä¹ Pythonç¼ç¨æ¨èéæ©è¾¾å æè²ï¼ç§æ¿âåå¸åºé«å¾ãé«å¾æ¿é«èªâçæå¦ç念ï¼æ¯è¾¾å å ¬å¸ç¡®ä¿æå¦è´¨éçéè¦ç¯èãä½ä¸ºç¾å½ä¸å¸èä¸æè²å ¬å¸ï¼è¯ä¿¡ç»è¥ï¼æç»èåå®£ä¼ æ¯è¯¥æºæéå¢çç»è¥ç念ã该æºæå¨å¦åæ¥åä¹åå®å ¨å ¬å¼æææ课讲å¸çæ课å®æåèæ¯èµæï¼å¹¶ä¸å¦åç¾è®¢ãæå®æ课讲å¸æ¿è¯ºä¹¦ãï¼ç¡®ä¿å¦åå©çã
æ³äºè§£æ´å¤æå ³Pythonçç¸å ³ä¿¡æ¯ï¼æ¨èå¨è¯¢è¾¾å æè²ãè¾¾å ä¸é¿éãAdobeã红帽ãORACLEã微软ãç¾å½è®¡ç®æºè¡ä¸åä¼ï¼CompTIAï¼ãç¾åº¦çå½é ç¥ååå建ç«äºé¡¹ç®åä½å ³ç³»ãå ±åå¶å®è¡ä¸å¹è®æ åï¼ä¸ºè¾¾å å¦åæä¾é«ç«¯ææ¯ãæå¦è¯¾ç¨åå½é åå认å¯ï¼è®©è¾¾å å¦åæ´å ·å½é åå°±ä¸ç«äºåã
pythonæ¯ä»ä¹è½¯ä»¶Pythonä¸æ¯è½¯ä»¶ï¼å®æ¯ä¸é¨ç¼ç¨è¯è¨ã
Pythonç±è·å °æ°å¦å计ç®æºç§å¦ç 究å¦ä¼çGuidovanRossumäºå¹´ä»£å设计ï¼ä½ä¸ºä¸é¨å«åABCè¯è¨çæ¿ä»£åãPythonæä¾äºé«æçé«çº§æ°æ®ç»æï¼è¿è½ç®åææå°é¢å对象ç¼ç¨ãPythonè¯æ³åå¨æç±»åï¼ä»¥å解éåè¯è¨çæ¬è´¨ï¼ä½¿å®æ为å¤æ°å¹³å°ä¸åèæ¬åå¿«éå¼ååºç¨çç¼ç¨è¯è¨ï¼éççæ¬çä¸ææ´æ°åè¯è¨æ°åè½çæ·»å ï¼éæ¸è¢«ç¨äºç¬ç«çã大å项ç®çå¼åã
Pythonæ¯ä»ä¹ç¼ç¨è¯è¨ï¼
Pythonçåºå±è¯è¨æ¯Cã大å¤æ°é«çº§è¯è¨é½æ¯å¨Cè¯è¨çåºç¡ä¸å¼åçï¼æ¯å¦PythonãJavaãC#â¦â¦ï¼è¿äºçåºå±é½æ¯Cã
Pythonæ¯ä¸ç§å¹¿æ³ä½¿ç¨ç解éåãé«çº§ç¼ç¨ãéç¨åç¼ç¨è¯è¨ï¼ç±åå¤Â·èç½èå§åé ï¼ç¬¬ä¸çåå¸äºå¹´ãå¯ä»¥è§ä¹ä¸ºä¸ç§æ¹è¯çLISPã
Pythonç设计å²å¦å¼ºè°ä»£ç çå¯è¯»æ§åç®æ´çè¯æ³ãç¸æ¯äºC++æè Javaï¼Python让å¼åè è½å¤ç¨æ´å°ç代ç 表达æ³æ³ãä¸ç®¡æ¯å°åè¿æ¯å¤§åç¨åºï¼è¯¥è¯è¨é½è¯å¾è®©ç¨åºçç»ææ¸ æ°æäºã
ä¸SchemeãRubyãPerlãTclçå¨æç±»åç¼ç¨è¯è¨ä¸æ ·ï¼Pythonæ¥æå¨æç±»åç³»ç»ååå¾åæ¶åè½ï¼è½å¤èªå¨ç®¡çå å使ç¨ï¼å¹¶ä¸æ¯æå¤ç§ç¼ç¨èå¼ï¼å æ¬é¢å对象ãå½ä»¤å¼ãå½æ°å¼åè¿ç¨å¼ç¼ç¨ãå ¶æ¬èº«æ¥æä¸ä¸ªå·¨å¤§è广æ³çæ ååºã
Python解éå¨æ¬èº«å ä¹å¯ä»¥å¨ææçæä½ç³»ç»ä¸è¿è¡ãPythonçå ¶ä¸ä¸ä¸ªè§£éå¨CPythonæ¯ç¨Cè¯è¨ç¼åçï¼æ¯ä¸ä¸ªç±ç¤¾ç¾¤é©±å¨çèªç±è½¯ä»¶ï¼å½åç±Python软件åºéä¼ç®¡çã
pythonæºä»£ç ç¼ç¨è½¯ä»¶ç¼åpythonæºä»£ç ç软件.é¦æ¨çPycharmã
PyCharmç¨äºbaiä¸è¬IDEå ·å¤çåè½ï¼æ¯å¦ï¼è°è¯ãè¯æ³é«äº®ãProject管çãdu代ç 跳转ãæºè½æ示ãèªå¨å®zhiæãåå æµè¯ãçæ¬æ§å¶
å¦å¤ï¼PyCharmè¿æä¾äºä¸äºå¾å¥½çåè½ç¨äºDjangoå¼åï¼åæ¶æ¯æGoogleAppEngineï¼æ´é ·çæ¯ï¼PyCharmæ¯æIronPythonã
å ¶æ¬¡æ¯sublimetextï¼SublimeTextæ¯æå¤ç§ç¼ç¨è¯è¨çè¯æ³é«äº®ãæ¥æä¼ç§ç代ç èªå¨å®æåè½ï¼è¿æ¥æ代ç ç段(Snippetï¼çåè½ï¼å¯ä»¥å°å¸¸ç¨ç代ç ç段ä¿åèµ·æ¥ï¼å¨éè¦æ¶éæ¶è°ç¨ãæ¯æVIM模å¼ï¼å¯ä»¥ä½¿ç¨Vim模å¼ä¸çå¤æ°å½ä»¤ãæ¯æå®ï¼ç®åå°è¯´å°±æ¯ææä½å½å¶ä¸æ¥æè èªå·±ç¼åå½ä»¤ï¼ç¶åææ¾åæå½å¶çæä½æè å½ä»¤ã
è¿æJupyter,JupyterNotebook(æ¤å被称为IPythonnotebook)æ¯ä¸ä¸ªäº¤äºå¼ç¬è®°æ¬ï¼æ¯æè¿è¡å¤ç§ç¼ç¨è¯è¨ã
æåå°±æ¯æåºæ¬çnopad++ï¼æå¼å§çæ¶åæ¯å®ç¨è¿æ¬¾ä½ä¸ºå¼åå·¥å ·è¿è¡åºç¡ç»ä¹ ã
pythonæ¯ä»ä¹è¯è¨åç±»:çµè/ç½ç»ç¨åºè®¾è®¡å ¶ä»ç¼ç¨è¯è¨
é®é¢æè¿°:
ä»çä¸ææ¯ä»ä¹ï¼ä»æä»ä¹ç¹ç¹
解æ:
Pythonæ¯ä»ä¹ï¼
Pythonæ¯ä¸ç§å¼æ¾æºä»£ç çèæ¬ç¼ç¨è¯è¨ï¼è¿ç§èæ¬è¯è¨ç¹å«å¼ºè°å¼åé度å代ç çæ¸ æ°ç¨åº¦ãå®å¯ä»¥ç¨æ¥å¼ååç§ç¨åºï¼ä»ç®åçèæ¬ä»»å¡å°å¤æçãé¢å对象çåºç¨ç¨åºé½æ大æ¾èº«æçå°æ¹ãPythonè¿è¢«å½ä½ä¸ç§å ¥é¨ç¨åºåæéåææ¡çä¼ç§è¯è¨ï¼å 为å®å è´¹ãé¢å对象ãæ©å±æ§å¼ºåæ¶æ§è¡ä¸¥æ ¼çç¼ç æ åã
Pythonæ¯å è´¹ç
GuidovanRossumäºå¹´å¼å§å¼åPythonï¼æåçç®çæ éæ¯ä¸ä¸ªèªå¨±ç项ç®ãä½ä¸ºMontyPythonçé£è¡é©¬æå¢èç®çç±å¥½è ï¼ä»ç»èªå·±å¼åçè¿ç§ç¼ç¨è¯è¨èµ·äºç°å¨è¿ä¸ªå¤æªçååï¼ä¸æææå°±æ¯å¤§èãPythonæå设计为ä¸ç§å代Amoebaåå¸å¼æä½ç³»ç»ABCçèæ¬è¯è¨ï¼ä½ä¸ä¹ è¿ç§æ°åç¼ç¨è¯è¨å¾å¿«å°±åå±æå¯ä»¥è§£å³ç¸å½å¤é®é¢çå©å¨ï¼ç°å¨æ´å¼å ¥å°äºå¤ç§å¹³å°ã
Guidoç®åè¿æ¯Python软件åºéä¼ç主å¸ã该ç»ç»æç §GNUå ¬å ±è®¸å¯åè®®çè¦æ±æ¥æPythonçç¥è¯äº§æå许å¯æãPythonå¯ä»¥ç¨å¨å¤ç§å¹³å°ä¸ï¼å æ¬WindowsãMacintoshååç§å¸¸è§çUNIXç³»ç»ãå¦å¤é对PalmOSå微软çPocketPCçç¸åºçæ¬ä¹å¨å¼åä¸ã
Pythonåè´¨è¶ ç¾¤
è½ç¶Python常ç¨æ¥å建ç®åçèæ¬ï¼ä½å®éç¨çç¼ç¨ææ¯å¯ä¸ç®åï¼æ¯å¦é¢å对象ç¼ç ãå¥æ¥åã线ç¨åGUIççãåå¦ä½ æ¯ä¸ä½åå ¥æµçç¨åºåï¼è¿äºç¹æ§æ¾ç¶å¯¹ä½ 太æ帮å©äºï¼å ä¸ºä½ å¯ä»¥å¾å¿«çææççç¼ç¨è¯æ³åç¼ç å®è·µï¼ä¹ååå¦ä¹ å ¶ä»è¯è¨ï¼æ¯å¦Javaæè C++çå¼å ¥çææ¯æ¦å¿µå°±å®¹æå¤äºãèæ¬å¯ä»¥åç¬æ§è¡ï¼ä¸è¿ï¼ä½ è¿å¯ä»¥éè¿ç±»æ件åå类对象类å以å åå©ç¨è¿ç§è¯è¨ç强大åè½ã
Pythonåºå«äºå ¶ä»é¢å对象è¯è¨çå ³é®æ两ç¹ãé¦å ï¼Python强è°ç©ºæ ¼åç¼ç ç»æï¼ä»è令å¼åè ç代ç å ·æè¯å¥½çéç¨æ§ãå ¶æ¬¡ï¼æ§è¡èæ¬ä¹åæ é¡»ç¼è¯Python代ç ï¼è¿å°±æ¯å®ä¸ºä»ä¹è¢«å½ä½èæ¬è¯è¨çåå ã
Pythonæäºæ©å±
Pythonè¯è¨æä¸ä¸ªå¼äººæ³¨ç®çä¼å¿ï¼å®å¯ä»¥é对è¯è¨æ æ³å®æåè½çå½æ°è°ç¨å½æ°åºãPythonè¿å ·ææäºç¸å½æç¨çå·¥å ·å¸®å©å¼ååºå¤æçåºç¨ç¨åºãå ¶ä¸æ常ç¨çå°±æ¯Tkinkerï¼è¿ç§å·¥å ·å¯ä»¥å®ç°è·¨å¹³å°çGUIå¼åãå¦ä¸ç§wxPythonå·¥å ·åæ¯å¯¹wxWindows跨平å°C++æ¡æ¶çæ©å±ãWxPythonç®åå·²ç»æ¯æWindowsåLinuxå¹³å°ãPythonImagingLibraryå¯ä»¥è®©Pythonå建ãæå¼ãç¼è¾åä¿®æ¹å¾è±¡ï¼å æ¬.gifã.jpegå.pngçã为äºäºè§£å¸¸ç¨çPythonæ©å±ååºç¨ï¼ä½ ä¸å¦¨è®¿é®ä¸TheVaultsofParnassusã
Pythonèªèº«è¿å¯ä»¥åµå ¥å°å ¶ä»ç¼ç¨è¯è¨ä¸ãæ常è§çå°±æ¯jython/]Jythonï¼è¿æ¯ä¸ç§ç¨Javaç¼åçPython解éå¨ãè¿æ ·ä½ å°±å¯ä»¥åæ¶å©ç¨ä¸¤ç§è¯è¨çä¼ç¹ãä½ è¿å¯ä»¥å¨å¼ºå¤§çJavaåºç¨ç¨åºæ¡æ¶ä¸ç»åPythonæ¸ æ°çè¯æ³æ¥å建åºä¾èµäºä¸¤ç§è¯è¨åºçåºç¨ç¨åºã
ç¼ç æ å
ä¸¥æ ¼çPythonè¯æ³æ¯å级ç¨åºå忽ç¥è¿ä¸å¼ºå¤§ç¼ç¨è¯è¨çæ主è¦åå ãå大å¤æ°çå ¶ä»é¢åWebèæ¬è¯è¨ä¸åçæ¯ï¼Pythonç空ç½æçä¸ä¾èµäºæ¬å·æè åå·æ¥è¡¨ç¤ºè¯å¥ç»æï¼æ¢è¡åå ä½ç¬¦ç¨æ¥æ述代ç çå¯è§ç»æãè¿ç§ç¼ç¨æ¹å¼ä¹çä¹ä¸ä»¤äººæå°åç¦ï¼ä½å´å¯¹ä½ å¦æè«å¤§ç好å¤ï¼è¿å°±æ¯ä»£ç çå¯é æ§ãPythonè¿ç§ç»æåæ¯å»ºç«å¨ä¸é¢çç论ä¹ä¸ï¼å¼åè çå·¥ä½æ¶é´æ¯æºæ财产ä¸ææä»·å¼çè´¢å¯ãä¸æ¦ä½ ä¹ æ¯äºç¼åPython代ç çè§åãå®é ä¸ä½ å°±ä¹ æ¯äºä¸ç§å 建çç¼ç æ åãè¿ä¹æ£æ¯å¤§å¤æ°Pythonå¼åè æä¾èµçæ åã
è·åPython
ä½ å¯ä»¥ä»[url=python]pythonæè å类平å°ä¸çPythonçæ¬ãActiveStateç½ç«ä¹åå¸ç¨äºWindowsãLinuxåSolarisçå¹³å°çPythonåºã
æç®åçPython代ç
ä¸é¢æ们举ä¾è¯´æPythonãåè®¾ä½ ç®å使ç¨çæ¯Windowsç³»ç»ï¼èä¸å·²ç»å®è£ äºPythonï¼è¯·é¦å å¯å¨IDLEï¼ä¹å°±æ¯PythonçGUIãç°å¨å¤äºPythonShellä¸ï¼å¦æä½ å¨UNIXç±»åçç³»ç»ä¸å°±éè¦é®å ¥pythonç±»åæç¤ºä½ çPythonå¯æ§è¡æ件ï¼ãæ¥çå¨""æ示符ä¸é®å ¥ï¼
print"HelloWorld"
è¿ä¸ªå¤§å®¶è³çè½è¯¦çç¨åºå°±å¨å±å¹ä¸æ¾ç¤ºåºç»æï¼ä½ è¿å¯ä»¥å¦ä¸æ示ç»åéèµå¼ï¼
myvar=
printmyvar
å¨ä¸ä¾ä¸ä¼æ¾ç¤ºç»æã
å¦æä½ å¼åçèæ¬æ é¡»å¨PythonShellä¸ç´æ¥è¾å ¥Pythonå°±æ´æç¨äºãç¨åºæ¸ åAå°±å å«äºä¸ä¸ªHelloWorldèæ¬ç示ä¾ï¼å ¶ä¸ç¼åäºif-elseè¯å¥ã
ä½ å¯ä»¥å¨å½ä»¤è¡ä¸é®å ¥scriptname.pyæ¥æ§è¡èªå·±çèæ¬ï¼pyæ¯Pythonèæ¬çæ åæ件æ©å±åï¼ãä½ åºè¯¥è½çå°æ£ç¡®çæ¾ç¤ºç»æãæ¸ åAä¸ï¼è·çifåelseä¹åç±å ä½ç¬¦ç¼©æçè¯å¥å°±æ¯ç©ºç½æ ¼å¼åçä¸é¨åã
è¿äºå¾ç®åç示ä¾æ¼ç¤ºäºPythonæ¸ æ°çè¯æ³ã为äºäºè§£æ´å¤æå ³Pythonç¼ç¨çä¿¡æ¯ï¼ä½ ä¸å¦¨æ¥çä¸Pythonç½ç«ä¸çåå¦è æåãå¦æä½ ä¸ä¹ æ¯äºä¸ç½æµè§ï¼é£ä¹ä½ è¿å¯ä»¥é 读O'ReillyåNewRidersåºççæå ³å¾ä¹¦ãæ¯å¦HowtoThinkLikeaComputerScientist:LearningwithPythonåPythonEssentialReferenceã
å°ç»
ä¸è®ºä½ æ¯ä¸ä½åå¦ç¼ç¨è¯è¨ä»¥å¾å¢é¿èªå·±ç¥è¯æè½çå ¥é¨ç¨åºåè¿æ¯ä¸ºäºè°åæ´å¤§ä»£ç å¯é æ§çPerlé«æï¼ä½ é½ä¼åç°Pythonæ¯ä¸ç§ç¸å½çµæ´»å强大çç¼ç¨è¯è¨ãå®å¯ä»¥å¼ååºåç§åæ ·çåºç¨ç¨åºï¼ä»åè½é½å¤çé®ä»¶å表软件å°åç§è·¨å¹³å°çGUIåºç¨ç¨åºä¸åºä¿±å ¨ã
ä¸é¢ç¨å°çæ¸ åA[re:xyb]
#ListA
#(IfyouareonanUNIXtypesystemyoumayhavetomodifythefirstlinetopointto
yourPythonexecutable.)
#!/usr/bin/pythonmyvar="HelloWorld"ifmyvar=="HelloWorld":printmyvarelse:print"myvardoesnotequalHelloWorld"
[ç²¾å]å¦å¤ï¼æä¹ä»ç»ä¸æ¬ä¹¦[re:xyb]
(enthusiast)
--:
BruceEckelçThinkinginPythonï¼å¯ä»¥ä»è¿éä¸è½½ã
BruceEckelå·²ç»åºççThinkinginJavaåThinkinginC++å¯é½æ¯é¼é¼å¤§åãä»æ£å¨åçæThinkinginPythonåThinkinginPatternï¼ä¸ç¥éä»ä¹æ¶åå¯ä»¥åºçã
å ¶ä»BruceEckelçèä½ä¸è½½ç®å½ï¼BruceEckel'sFreeElectronicBooks
æç« é项ï¼
2024-11-28 11:50
2024-11-28 11:41
2024-11-28 11:23
2024-11-28 10:53
2024-11-28 09:48
2024-11-28 09:15