今天在羣裏有人問題,他的Python程序在家裏運行好好的,但在公司一運行,就出問題了,查來查去查不出來,因而我就把他的程序調轉過來看了一下,發現又是Python2.7與Python3的問題。
代碼是作了一個可定義任意位數的水仙花數函數python
def fn(n): rs = [] for i in range(pow(10,n-1),pow(10,n)): rs = map(int, str(i)) sum = 0 for k in range(0,len(rs)): sum = sum + pow(rs[k],n) if sum == i: print(i) if __name__=="__main__": n = int(input("請輸入正整數的位數:")) fn(n)
在Python2.7下面運行結果:
less
請輸入正整數的位數:5ide
54748函數
92727spa
93084code
Process finished with exit code 0orm
但在Python3下面運行結果:
blog
請輸入正整數的位數:5文檔
Traceback (most recent call last):部署
File "D:/Program Files/JetBrains/PyCharm 2017.1.5/myPY/myPYPro/lesson001.py", line 18, in <module>
fn(n)
File "D:/Program Files/JetBrains/PyCharm 2017.1.5/myPY/myPYPro/lesson001.py", line 11, in fn
for k in range(0,len(rs)):
TypeError: object of type 'map' has no len()
Process finished with exit code 1
由於提示是:TypeError: object of type 'map' has no len()
因此直接把代碼簡化,輸出list看看
簡化代碼以下:
rs = [] for i in range(100,1000): rs = map(int, str(i)) print(rs)
在Python2.7下面運行結果:
[9, 9, 9]
Process finished with exit code 0
但在Python3下面運行結果:
<map object at 0x00C6E530>
Process finished with exit code 0
好吧,這就明白了,Python3下發生的一些新的變化,再查了一下文檔,發現加入list就能夠正常了
在Python3中,rs = map(int, str(i)) 要改爲:rs = list(map(int, str(i)))
則簡化代碼要改爲以下:
rs = [] for i in range(100,1000): rs = list(map(int, str(i))) print(rs)
Python3下面運行結果就正常了:
以前就發佈過一篇關於:Python 2.7.x 和 3.x 版本區別小結
基於兩個版本的不同,若是不知道將要把代碼部署到哪一個版本下,能夠暫時在代碼里加入檢查版本號的代碼:
import platform
platform.python_version()
經過判斷版本號來臨時調整差別,不過如今只是過渡,之後你們都使用Python3如下版本後,就應該不須要這樣作了。