Python 3のmap関数の問題


今日グループの中で人の问题があって、彼のPythonプログラムは家の中で运行してよくて、しかし会社で运行すると、问题が発生して、调べて调べて调べて调べて调べて调べて调べて调べて调べて见て、そこで私は彼のプログラムを回転して见て、またPython 2であることを発见しました.7とPython 3の質問です.コードは任意の桁数を定義できる水仙数関数を作ったのです
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)

Python 2.7次の実行結果:
正の整数の桁数を入力してください:5
54748
92727
93084
Process finished with exit code 0
しかし、Python 3の下で実行した結果:
正の整数の桁数を入力してください:5
Traceback (most recent call last):
  File "D:/Program Files/JetBrains/PyCharm 2017.1.5/myPY/myPYPro/lesson001.py", line 18, in
    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)

Python 2.7次の実行結果:[9,9,9]Process finished with exit code 0ただしPython 3次の実行結果:
Process finished with exit code 0
はい、わかりました.Python 3の下で起こった新しい変化を調べてみると、リストに入れると正常になります.Python 3では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)

 
Python 3の次の実行結果は正常です.
[9, 9, 9]
Process finished with exit code 0
前に、Python 2.7.1について発表しました.xと3.xバージョン区別小結
2つのバージョンの違いに基づいて、コードをどのバージョンに配置するか分からない場合は、バージョン番号をチェックするコード:import platformplatformを一時的にコードに追加することができます.python_バージョン()はバージョン番号が来ると判断して差を調整しますが、今は移行しているだけで、これからはPython 3以下のバージョンをみんなで使うようになったら、そうする必要はありません.