私は、数値を受け取り、それを2進数に変換し、2進数の合計を返す単純なPythonスクリプトに取り組んでいます。これが私がこれまでに持っているものです。
#!/usr/bin/python
def sum2(n):
a = str(bin(n))
b = a.replace('0b', '')
return sum([map(int, x) for x in b])
n = int(raw_input("Input number>"))
print sum2(n)
平易な英語では、nを取り、それをバイナリに変換してから、文字列に変換します。( bin()から) 0bを切り取り、バイナリ文字をintのリストに変換してから、それらをsum()しようとします。
数字を足し合わせる方法を見つけようとしたとき、私はグーグルで調べて、intのリストをsum()できるはずだとわかりました。これを実行しようとすると、このトレースバックが発生します。
Traceback (most recent call last):
File "D:\scripts\sum2n1.py", line 9, in <module>
print sum2(x)
File "D:\scripts\sum2n1.py", line 6, in sum2
return sum([map(int, x) for x in b])
TypeError: unsupported operand type(s) for +: 'int' and 'list'
だから私はsum()がその仕事をするために「反復可能」を必要としていることを知りました。グーグルで検索すると、呼び出すことができるiter()関数があることがわかりましたが、機能していないようです。
There's also __iter__() which doesn't work either.
誰かが私が間違っていることを教えてもらえますか?私はまだかなりの初心者です。前もって感謝します。
(いいえ、それは私の宿題ではありません。)