Python3下map函數的問題

今天在羣裏有人問題,他的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(intstr(i))  要改爲:rs = list(map(intstr(i)))

簡化代碼要改爲以下:

rs = []
for i in range(100,1000):
    rs = list(map(int, str(i)))
print(rs)

 

Python3下面運行結果就正常了:
[9, 9, 9]
Process finished with exit code 0


以前就發佈過一篇關於:Python 2.7.x 和 3.x 版本區別小結


基於兩個版本的不同,若是不知道將要把代碼部署到哪一個版本下,能夠暫時在代碼里加入檢查版本號的代碼:
import platform
platform.python_version() 
經過判斷版本號來臨時調整差別,不過如今只是過渡,之後你們都使用Python3如下版本後,就應該不須要這樣作了。

相關文章
相關標籤/搜索