>"I give you a new commandment, that you love one another. Just as I have loved you, you also should love one another. By this everyone will know that you are my disciples, if you have love for one another."(JOHN14:34-35) #餿³ 餿³å°å¦ï¼ä¸ä» æ¯Pythonã æ´ä½åµï¼Python 2åPython 3ä¸ç餿³è¿ä¸ä¸æ ·ã æ´å°å¦äºã æä»¥ï¼è¯»è ä¸è¦å 为æåç¬ååºæ¬èèææ¨è¨ã ##æ´æ°é¤ä»¥æ´æ° è¿å ¥Python 2äº¤äºæ¨¡å¼ä¹åï¼ç»ä¹ ä¸é¢çè¿ç®ï¼ >>> 2 / 5 0 >>> 2.0 / 5 0.4 >>> 2 / 5.0 0.4 >>> 2.0 / 5.0 0.4 çå°æ²¡æï¼Python 2 ä¸ç麻ç¦åºæ¥äºï¼æç §æ°å¦è¿ç®ï¼ä»¥ä¸å个è¿ç®ç»æé½åºè¯¥æ¯0.4ã使们çå°çåä¸ä¸ªç¬¦åï¼ç¬¬ä¸ä¸ªå± ç¶ç»ææ¯0ãwhy? å 为ï¼å¨Python 2é颿ä¸ä¸ªè§å®ï¼å2/5ä¸ç餿³è¿æ ·ï¼æ¯è¦åæ´ï¼å°±æ¯å»æå°æ°ï¼ä½ä¸æ¯åèäºå ¥ï¼ã2é¤ä»¥5ï¼åæ¯0ï¼æ´æ°ï¼ï¼ä½æ°æ¯2ï¼æ´æ°ï¼ãé£ä¹å¦æç¨è¿ç§å½¢å¼ï¼2/5ï¼è®¡ç®ç»æå°±æ¯åé£ä¸ªæ´æ°ãæè å¯ä»¥ç解为ï¼**æ´æ°é¤ä»¥æ´æ°ï¼ç»ææ¯æ´æ°ï¼åï¼**ã æ¯å¦ï¼ >>> 5 / 2 2 >>> 7 / 2 3 >>> 8 / 2 4 **注æï¼**å¾å°æ¯åï¼æ´æ°ï¼,è䏿¯å¾å°å«æå°æ°ä½çç»æåéè¿âåèäºå ¥âåæ´ãä¾å¦ï¼5/2ï¼å¾å°çæ¯å2ï¼ä½æ°1ï¼æç»`5 / 2 = 2`ã并䏿¯å¯¹2.5è¿è¡åèäºå ¥ã è¿å°±æ¯Python 2ä¸è§å®çååï¼ä¸ç¨ç¢ç£¨ä¸ºä»ä¹äºã å¨Python 3.xä¸ï¼è§åååäºï¼å¦æ`1/2`ï¼ç»æå°±æ¯0.5ï¼ä¹å°±æ¯è¯´Python 3ä¸ç餿³æ¯çæ£ç餿³äºï¼è¦åæ´ï¼åªè½ç¨`1//2`çæ¹å¼ï¼å³`1//2=0`ã è¿å°±æ¯è§åï¼äººä¸ºè§å®çï¼ä½¿ç¨è åªæé¡ºä»ï¼å°±å¦åè¶³çæ¯èµçè§å䏿 ·ã å¨Python 3ä¸ï¼æ¼ç¤ºå ä¸ªé¤æ³ï¼ >>> 5 / 2 2.5 >>> 7 / 2 3.5 >>> 8 / 2 4.0 è¦æ³å®ç°ç±»ä¼¼Python 2ä¸é£æ ·ç忴餿³ï¼Python 3乿¯å¯ä»¥ï¼è¿ä¹åï¼ >>> 5 // 2 2 ##æµ®ç¹æ°ä¸æ´æ°ç¸é¤ è¿éè¿æ¯å 讨论Python 2ä¸çâæµ®ç¹æ°ä¸æ´æ°ç¸é¤âï¼å ¶å«ä¹æ¯ï¼ å设ï¼xé¤ä»¥yãå ¶ä¸ x å¯è½æ¯æ´æ°ï¼ä¹å¯è½æ¯æµ®ç¹æ°ï¼yå¯è½æ¯æ´æ°ï¼ä¹å¯è½æ¯æµ®ç¹æ°ã åºç»è®ºä¹åï¼è¿æ¯å åå®éªï¼ >>> 9.0 / 2 4.5 >>> 9 / 2.0 4.5 >>> 9.0 / 2.0 4.5 >>> 8.0 / 2 4.0 >>> 8 / 2.0 4.0 >>> 8.0 / 2.0 4.0 å½çº³ï¼å¾å°è§å¾ï¼**ä¸ç®¡æ¯è¢«é¤æ°è¿æ¯é¤æ°ï¼åªè¦æä¸ä¸ªæ°æ¯æµ®ç¹æ°ï¼ç»æå°±æ¯æµ®ç¹æ°ã**æä»¥ï¼å¦æç¸é¤çç»ææä½æ°ï¼ä¹ä¸ä¼ååé¢ä¸æ ·äºï¼èæ¯è¦è¿åä¸ä¸ªæµ®ç¹æ°ï¼è¿å°±è·å¨æ°å¦ä¸å¦ä¹ çç»æä¸æ ·äºã å说Python 3ã åé¢å·²ç»çå°ï¼`5 / 2`ï¼å¾å°çå°±æ¯æµ®ç¹æ°`2.5`ï¼ç°å¨ï¼å¦æå½é¤æ°æè è¢«é¤æ°ï¼æä¸ä¸ªæè ä¸¤ä¸ªé½æ¯æµ®ç¹æ°ï¼ç»æå½ç¶è¿æ¯æµ®ç¹æ°ã >>> 5.0 / 2 2.5 çæ¥Python 3çä¸è´æ§æ¯è¾å¥½ã ä½ä¸ç®¡æ¯Python 2è¿æ¯Python 3ï¼é½æè¿ç§æ åµï¼ >>> 10.0 / 3 3.3333333333333335 è¿ä¸ªæ¯ä¸æ¯å°±æç¹ææªäºï¼æç §æ°å¦ç¥è¯ï¼åºè¯¥æ¯3.33333...ï¼å颿¯3ç循ç¯äºãé£ä¹ä½ çè®¡ç®æºå°±åä¸ä¸æ¥äºï¼æ»¡å±é½æ¯3ã为äºé¿å è¿ä¸ªï¼Pythonæ¦æç»ç»äºå¾ªç¯ï¼ä½æ¯ï¼å¯æ²çæ¯æ²¡ææç §âåèäºå ¥âçååç»æ¢ãå½ç¶ï¼è¿ä¼ææ´å¥è©çåºç°ï¼ >>> 0.1 + 0.2 0.30000000000000004 >>> 0.1 + 0.1 - 0.2 0.0 >>> 0.1 + 0.1 + 0.1 - 0.3 5.551115123125783e-17 >>> 0.1 + 0.1 + 0.1 - 0.2 0.10000000000000003 è¶æ¥è¶ç³æ¶äºï¼ä¸ºä»ä¹computerå§å¨å¨è®¡ç®è¿ä¹ç®åçé®é¢ä¸ï¼å¦æ¤ç³æ¶äºå¢ï¼ä¸æ¯computerå§å¨ç³æ¶ï¼å¥¹ä¾ç¶å°éªèªæã åå å¨äºåè¿å¶åäºè¿å¶ç转æ¢ä¸ï¼computerå§å¨ç¨çæ¯äºè¿å¶è¿è¡è®¡ç®ï¼ä¸é¢çä¾åä¸ï¼æä»¬è¾å ¥çæ¯åè¿å¶ï¼å¥¹å°±è¦æåè¿å¶çæ°è½¬å为äºè¿å¶ï¼ç¶åå计ç®ã使¯ï¼å¨è½¬åä¸ï¼æµ®ç¹æ°è½¬å为äºè¿å¶ï¼å°±åºé®é¢äºã ä¾å¦åè¿å¶ç0.1ï¼è½¬å为äºè¿å¶æ¯ï¼0.0001100110011001100110011001100110011001100110011... ä¹å°±æ¯è¯´ï¼è½¬å为äºè¿å¶åï¼ä¸ä¼ç²¾ç¡®çäºåè¿å¶ç0.1ãåæ¶ï¼è®¡ç®æºåå¨ç使°æ¯æéå¶çï¼æä»¥ï¼å°±åºç°ä¸è¿°ç°è±¡äºã è¿ç§é®é¢ä¸ä» ä» æ¯Pythonä¸æï¼æææ¯ææµ®ç¹æ°è¿ç®çç¼ç¨è¯è¨é½ä¼éå°ï¼å®ä¸æ¯Pythonçbugã æç½äºé®é¢åå ï¼æä¹è§£å³å¢ï¼å°±Pythonçæµ®ç¹æ°è¿ç®èè¨ï¼å¤§å¤æ°æºå¨ä¸æ¯æ¬¡è®¡ç®è¯¯å·®ä¸è¶ è¿ 2**53 åä¹ä¸ã对äºå¤§å¤æ°ä»»å¡è¿å·²ç»è¶³å¤äºï¼ä½æ¯è¦å¨å¿ä¸è®°ä½è¿ä¸æ¯åè¿å¶ç®æ³ï¼æ¯ä¸ªæµ®ç¹æ°è®¡ç®å¯è½ä¼å¸¦æ¥ä¸ä¸ªæ°çèå ¥é误ã ä¸è¬æ åµä¸ï¼åªè¦ç®åå°å°æç»æ¾ç¤ºçç»æç¨âåèäºå ¥âå°æææçåè¿å¶ä½æ°ï¼å°±ä¼å¾å°ææçæç»ç»æã 使¯ï¼ä¸æ¯ä»ä¹å°æ¹é½è½âå·®ä¸å¤âçãéè¦ç²¾ç¡®ï¼ç¨ä»ä¹æ¹æ³è§£å³ï¼ å¯ä»¥ä½¿ç¨ decimal 模åï¼å®å®ç°çåè¿å¶è¿ç®éåä¼è®¡æ¹é¢çåºç¨åé«ç²¾åº¦è¦æ±çåºç¨ã å¦å¤ fractions æ¨¡åæ¯æå¦å¤ä¸ç§å½¢å¼çè¿ç®ï¼å®å®ç°çè¿ç®åºäºæçæ°ï¼å æ¤å1/3è¿æ ·çæ°åå¯ä»¥ç²¾ç¡®å°è¡¨ç¤ºï¼ã æé«è¦æ±å坿¯ä½¿ç¨numPy å åå ¶å®ç¨äºæ°å¦åç»è®¡å¦çå ã ååºè¿äºä¸è¥¿ï¼ä» ä» æ¯è®©è¯»è è½æç½ï¼è§£å³é®é¢çæ¹å¼å¾å¤ï¼ä¸å¿ æ å¿ã å ³äºæ é循ç¯å°æ°é®é¢ï¼æä¸ä¸ªé¾æ¥æ¨èç»è¯¸ä½ï¼å®ä¸æ¯æ³è±¡çé£ä¹ç®ååã请é 读ï¼[ç»´åºç¾ç§çè¯æ¡ï¼0.999...](http://zh.wikipedia.org/wiki/0.999%E2%80%A6)ï¼ä¼ä¸ä¼ææ·±å ¥ä½ä¼å¢ï¼ >è¡¥å ä¸ä¸ªèµæï¼ä¾æå ´è¶£çæåé 读ï¼[æµ®ç¹æ°ç®æ³ï¼äºè®®åéå¶](https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues) Pythonæ»ä¼è¦æä¾å¤ç§è§£å³é®é¢çæ¹æ¡çï¼è¿æ¯å¥¹ç飿 ¼ã å¹¶ä¸å¸¸å¸¸æç°æçâè½®åâ坿¯ä½¿ç¨ã ##å¼ç¨æ¨¡åè§£å³é¤æ³ Python乿以å人欢è¿ï¼ä¸ä¸ªå¾ééè¦çåå ï¼å°±æ¯è½®åå¤ãè¿æ¯æ¯å»å¦ã就好æ¯ä½ è¦è·çå¿«ï¼æä¹åï¼å 天天ç»ä¹ è·æ¥æ¯ä¸è¡æ»´ï¼è¦ç¨è½®åãæ¾è¾èªè¡è½¦ï¼å°±å¿«äºå¾å¤ãè¿å«ä¸å¤å¿«ï¼åæ¢çµç¶è½¦ï¼åæ¢æ±½è½¦ï¼åæ¢é«é...åæ£ä½ å¯ä»¥éæ©çå¾å¤ã使¯ï¼è¿äºè®©ä½ è·çå¿«çä¸è¥¿ï¼å¤æ°ä¸æ¯ä½ èªå·±é çï¼æ¯å«äººé 好äºï¼ä½ æ¥ç¨ãçè³ä¸¤æ¡è ¿ä¹æ¯æè°¢ç¶æ¯æ©èµãæ£æ¯å 为轮åå¤ï¼å¯ä»¥éæ©çå¤ï¼å°±å¯ä»¥ä»¥åç§ä¸åé度享åäºã è½®åæ¯äººç±»ä¼å¤§çåæã Pythonå°±æ¯è¿æ ·ï¼æåç§è½®åï¼æä»¬åªéè¦ç¨ãåªä¸è¿é£äºè½®åå¨Pythonéé¢çååä¸å«èªè¡è½¦ã汽车ï¼å«åâæ¨¡åâæè âåºâï¼æäººæ¿æ¥å«çè¯è¨çåç§°ï¼å«åâç±»åºâãâç±»âãä¸ç®¡å«ä»ä¹ååå§ãå°±æ¯å«äººé 好çä¸è¥¿æä»¬æ¿è¿æ¥ä½¿ç¨ã æä¹ç¨ï¼å¯ä»¥éè¿ä¸¤ç§å½¢å¼ç¨ï¼ - å½¢å¼1ï¼import module-nameãimportåé¢è·ç©ºæ ¼ï¼ç¶åæ¯æ¨¡ååç§°ï¼ä¾å¦ï¼import os - å½¢å¼2ï¼from module1 import module11ãmodule1æ¯ä¸ä¸ªå¤§æ¨¡åï¼éé¢è¿æå模åmodule11ï¼åªæ³ç¨module11ï¼å°±è¿ä¹åäºã ä¸å°å¦äºï¼å®éªä¸ä¸ªï¼ >>> from __future__ import division >>> 5 / 2 2.5 >>> 9 / 2 4.5 >>> 9.0 / 2 4.5 >>> 9 / 2.0 4.5 注æäºï¼å¼ç¨äºä¸ä¸ªæ¨¡åä¹åï¼åå餿³ï¼å°±ä¸ç®¡ä»ä¹æ åµï¼é½æ¯å¾å°æµ®ç¹æ°çç»æäºã å½ç¶ï¼ä¸è¿°åæ³æ¯å¨Python 2ä¸ï¼å 为Python 3ä¸å¤©ç¶å¦æ¤äºï¼æ²¡æå¿ è¦å为æ¤è`from __future__ import division`ã è¿å°±æ¯è½®åçåéã 餿³çç»ææé¤æ°ãè¢«é¤æ°ãåå使°ï¼ä½æ°ä¹å¯ä»¥åç¬è®¡ç®ã ##使° 计ç®`5/2`ï¼åæ¯2ï¼ä½æ°æ¯1ã 使°æä¹å¾å°ï¼å¨Pythonä¸ï¼å ¶å®å¤§å¤æ°è¯è¨ä¹é½æ¯ï¼ï¼ç¨`%`ç¬¦å·æ¥åå¾ä¸¤ä¸ªæ°ç¸é¤ç使°. æä½å¦ä¸ï¼ä¸è®ºPython 2è¿æ¯Python 3ï¼ >>> 5 % 2 1 >>> 6 % 4 2 >>> 5.0 % 2 1.0 符å·ï¼%ï¼å°±æ¯è¦å¾å°ä¸¤ä¸ªæ°ï¼å¯ä»¥æ¯æ´æ°ï¼ä¹å¯ä»¥æ¯æµ®ç¹æ°ï¼ç¸é¤ç使°ã Python䏿¯ç¥ï¼å 为她å¤åã é¤äºä½¿ç¨`%`æ±ä½æ°ï¼è¿æå å»ºå½æ°`divmod()`ââè¿åçæ¯åå使°ã >>> divmod(5, 2) #表示5é¤ä»¥2ï¼è¿åäºåå使° (2, 1) >>> divmod(9, 2) (4, 1) >>> divmod(5.0, 2) (2.0, 1.0) åæ ·æ¯ä¸åºåçæ¬ã ##åèäºå ¥ æåä¸ä¸ªäºï¼ä¸å®è¦åæï¼çç¡®æç¹å°å¦äºã è¦å®ç°åèäºå ¥ï¼å¾ç®åï¼å°±æ¯å å»ºå½æ°ï¼`round()` 卿è¯è¯ï¼ >>> round(1.234567, 2) 1.23 >>> round(1.234567, 3) 1.235 >>> round(10.0/3, 4) 3.3333 å¦ä½çè§£`round()`å å»ºå½æ°ç使ç¨ï¼è¦å»ºç«ä¸ä¸ªå¥½ä¹ æ¯ï¼å¹¶ä¸ææ¡è¿ä¸ªå¥½æ¹æ³ï¼ >>> help(round) Help on built-in function round in module builtins: round(...) round(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative. åºè¯¥è½è¯»æï¼æç¸ä¿¡ä½ ã ç®åå§ãè¶ç®åçæ¶åï¼è¶è¦å°å¿ï¼å½ä½ éå°ä¸é¢çæ åµï¼å°±æç¹æçäºï¼ >>> round(1.2345, 3) 1.234 #åºè¯¥æ¯ï¼1.235 >>> round(2.235, 2) 2.23 #åºè¯¥æ¯ï¼2.24 ååï¼åç°äºPythonçä¸ä¸ªbugï¼å¤ªæ¿å¨äºã å«é£ä¹æ¿å¨ï¼å¦æççæ¯bugï¼è¿ä¹ææ¾ï¼æ¯è½®ä¸å°æçã为ä»ä¹ï¼å ·ä½è§£éçè¿éï¼ä¸é¢æå½å®æ¹ææ¡£ä¸ç䏿®µè¯ï¼ >**Note:** >The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: itâs a result of the fact that most decimal fractions canât be represented exactly as a float. See [Floating Point Arithmetic: Issues and Limitations](https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues) for more information. 忥ççè½®ä¸å°æã彿 ¹å°åºè¿æ¯æµ®ç¹æ°ä¸çåè¿å¶è½¬å为äºè¿å¶æ¹ç祸ã ä¼¼ä¹é¤æ³çé®é¢å°æ¤è¦ç»æäºï¼å ¶å®è¿è¿æ²¡æï¼ä¸è¿ï¼å为åå¦è ï¼è³æ¤å³å¯ãè¿çä¸äºå¾å¤è¯é¢ï¼æ¯å¦å¦ä½å¤ç循ç¯å°æ°é®é¢ï¼æè¯å®ä¸ä¼è®©ææ¢ç´¢ç²¾ç¥çæå失æçï¼å¨æçgithubä¸æè¿æ ·ä¸ä¸ªè½®åï¼å¦æè¦æ·±å ¥ç ç©¶ï¼[å¯ä»¥æ¥è¿éå°è¯](https://github.com/qiwsir/algorithm/blob/master/divide.py)ã 对äºè®¡ç®ï¼è¿ä¸æ¢è¿äºï¼è¿æä¸ä¸ªæ´å¥½ç¨çå·¥å ·ââmathã ------ [æ»ç®å½](./index.md) | [ä¸èï¼æ°åååè¿ç®](./102.md) | [ä¸èï¼Math模ååè¿ç®ä¼å 级](./104.md) å¦æä½ è®¤ä¸ºæå¿ è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã