#å°å¦ç餿³ 餿³å°å¦çï¼ä¸ä» æ¯pythonã ##æ´æ°é¤ä»¥æ´æ° çå®è¯·å¨å¯å¨idleä¹åï¼ç»ä¹ ä¸é¢çè¿ç®ï¼ >>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >>> 2.0/5.0 0.4 çå°æ²¡æï¼éº»ç¦åºæ¥äºï¼å¦æä»å°å¦æ°å¦ç¥è¯é¤æ³ï¼ä»¥ä¸å个è¿ç®ç»æé½åºè¯¥æ¯0.4ã使们çå°çåä¸ä¸ªç¬¦åï¼ç¬¬ä¸ä¸ªå± ç¶ç»ææ¯0ãwhy? å 为ï¼å¨pythoné颿ä¸ä¸ªè§å®ï¼å2/5ä¸ç餿³è¿æ ·ï¼æ¯è¦åæ´ã2é¤ä»¥5ï¼åæ¯0ï¼æ´æ°ï¼ï¼ä½æ°æ¯2ï¼æ´æ°ï¼ãé£ä¹å¦æç¨è¿ç§å½¢å¼ï¼2/5ï¼è®¡ç®ç»æå°±æ¯åé£ä¸ªæ´æ°ãæè å¯ä»¥ç解为ï¼**æ´æ°é¤ä»¥æ´æ°ï¼ç»ææ¯æ´æ°ï¼åï¼**ã ç»§ç»å®éªï¼éªè¯è¿ä¸ªç»è®ºï¼ >>> 5/2 2 >>> 6/3 2 >>> 5/2 2 >>> 6/2 3 >>> 7/2 3 >>> 8/2 4 >>> 9/2 4 **注æï¼**è¿éæ¯å¾å°æ´æ°å,è䏿¯å¾å°å«æå°æ°ä½çç»æåâåèäºå ¥âãä¾å¦5/2ï¼å¾å°çæ¯å2ï¼ä½æ°1ï¼æç»5/2=2ã并䏿¯å¯¹2.5è¿è¡åèäºå ¥ã ##æµ®ç¹æ°ä¸æ´æ°ç¸é¤ å为ç宿³¨æï¼è¿ä¸ªæ é¢åä¸é¢çæ 颿 ¼å¼ä¸ä¸æ ·ï¼ä¸é¢çæ 颿¯âæ´æ°é¤ä»¥æ´æ°âï¼å¦ææç §é£æ ¼ä¸è´¯å¶çè¦æ±ï¼æ¬èæ é¢åºè¯¥æ¯âæµ®ç¹æ°é¤ä»¥æ´æ°âï¼ä½æ²¡æï¼ç°å¨æ¯âæµ®ç¹æ°ä¸æ´æ°ç¸é¤âï¼è¿æ¯å 为å å«äºä»¥ä¸ä¸ç§æ åµï¼ - è¢«é¤æ°æ¯æµ®ç¹æ°ï¼é¤æ°æ¯æ´æ° - è¢«é¤æ°æ¯æ´æ°ï¼é¤æ°æ¯æµ®ç¹æ° - è¢«é¤æ°å餿°é½æ¯æµ®ç¹æ° åºç»è®ºä¹åï¼è¿æ¯å åå®éªï¼ >>> 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 å½çº³ï¼å¾å°è§å¾ï¼**ä¸ç®¡æ¯è¢«é¤æ°è¿æ¯é¤æ°ï¼åªè¦æä¸ä¸ªæ°æ¯æµ®ç¹æ°ï¼ç»æå°±æ¯æµ®ç¹æ°ã**æä»¥ï¼å¦æç¸é¤çç»ææä½æ°ï¼ä¹ä¸ä¼ååé¢ä¸æ ·äºï¼èæ¯è¦è¿åä¸ä¸ªæµ®ç¹æ°ï¼è¿å°±è·å¨æ°å¦ä¸å¦ä¹ çç»æä¸æ ·äºã >>> 10.0/3 3.3333333333333335 è¿ä¸ªæ¯ä¸æ¯å°±æç¹ææªäºï¼æç §æ°å¦ç¥è¯ï¼åºè¯¥æ¯3.33333...ï¼å颿¯3ç循ç¯äºãé£ä¹ä½ çè®¡ç®æºå°±åä¸ä¸æ¥äºï¼æ»¡å±é½æ¯3ã为äºé¿å è¿ä¸ªï¼pythonæ¦æç»ç»äºå¾ªç¯ï¼ä½æ¯ï¼å¯æ²çæ¯æ²¡ææç §âåèäºå ¥âçååç»æ¢ã å ³äºæ é循ç¯å°æ°é®é¢ï¼å°å¦é½å¦ä¹ äºï¼ä½æ¯è¿å¯ä¸æ¯ä¸ä¸ªç®åé®é¢ï¼çç[ç»´åºç¾ç§çè¯æ¡ï¼0.999...](http://zh.wikipedia.org/wiki/0.999%E2%80%A6)ï¼ä¼ä¸ä¼ææ·±å ¥ä½ä¼å¢ï¼ æ»ä¹ï¼è¦ç¨pythonï¼å°±å¾éµå¾ªå¥¹çè§å®ï¼åé¢ä¸¤æ¡è§å®å·²ç»æç¡®äºã >è¡¥å ä¸ä¸ªèµæï¼ä¾æå ´è¶£çæåé 读ï¼[æµ®ç¹æ°ç®æ³ï¼äºè®®åéå¶](https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues) **说æï¼**以ä¸é¤æ³è§åï¼æ¯é对python2ï¼å¨python3ä¸ï¼å°5/2å5.0/2çåèµ·æ¥äºãä¸è¿ï¼å¦æè¦å¾å°é£ä¸ªæ´æ°é¨åçä¸ï¼å¯ä»¥ç¨å¦å¤ä¸ç§æ¹å¼ï¼å°æ¿é¤. >>> 9/2 4 >>> 9//2 4 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 注æäºï¼å¼ç¨äºä¸ä¸ªæ¨¡åä¹åï¼åå餿³ï¼å°±ä¸ç®¡ä»ä¹æ åµï¼é½æ¯å¾å°æµ®ç¹æ°çç»æäºã è¿å°±æ¯è½®åçåéã ##å ³äºä½æ° åé¢è®¡ç®5/2çæ¶åï¼åæ¯2ï¼ä½æ°æ¯1 使°æä¹å¾å°ï¼ å®éªä¸é¢çæä½ï¼ >>> 5%2 1 >>> 9%2 1 >>> 7%3 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(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)ã