線
digits=x*(2**length)
は「x*(2**length)
を保持する変数digits
を設定」を意味します。 digits
は数字のリストにアクセスする唯一の方法であり、あなたはそれを1桁の数字にするだけでした。残りのリストにアクセスできなくなりました。そして、Pythonはこれを認識してリストを破棄します。代わりに、digits[x]
でアクセスできるdigits
のx
番目の要素を設定するように見えます。これは、あなたが望む線があることを意味します
digits[x] = digits[x]*(2**length)
しかし、これはこの目標を達成する最良の方法ではありません。一つのこととして、あなたは数字の束を加えているだけです。リストを変更することなくそれを行う方が簡単です。たとえば:今、私たちはx
にアクセスする唯一の方法は、呼び出すことである
注意を
total = 0
for x in range(len(digits)):
total += digits[x] * (2**length)
length=length-1
print(total)
は(それは多くの場合、組み込みの名前を上書きするために、悪い考えですので、私は
total
へ
sum
から変数名を変更しました)
digits[x]
。このループは全く
length
変数を必要としないために簡略化することができ
total = 0
for digit in digits:
total += digit * (2**length)
length=length-1
print(total)
:それはむしろインデックスよりも、リスト自体を反復するために、一般的に多くの慣用的だ
total = 0
for digit in digits:
total *= 2
total += digit
print(total)
これは最初のtotal
を倍増し、その後に次の桁を追加します。これは両方とも読みやすくなります(length
という名前は通常の合計での長さであるため、変更されません)、数字がわからなくても機能します。 (それはinput()
の結果だから)あなたは変換する必要はありませんので、digits
はすでにstr
で、この時点で
digits = [int(x) for x in str(digits)]
:
別のノートでは、あなたがdigits
リストを生成する方法でありますそれはstr
への呼び出しを伴います。ちょうど[int(x) for x in digits]
最後に、これのすべてのためのより簡単な方法があります。私たちはPythonインタプリタにコマンドhelp(int)
を実行した場合、我々は次のようにint
コンストラクタが文書化されていることを参照してください。
int(x=0) -> integer
int(x, base=10) -> integer
整数に数値や文字列を変換し、または全く場合は0を返します引数 が与えられます。 x
が数字の場合は、x.__int__()
を返します。浮動小数点数が の場合、これはゼロに向かって切り捨てられます。
x
は数ないか、または塩基が与えられた場合、x
は 所与ベースでリテラル整数を表す文字列、 バイト、またはByteArrayインスタンスでなければならない場合。リテラルの前には、'+'
または'-'
があり、空白は で囲むことができます。基数のデフォルトは10です。有効な基数は0と2〜36です。 ベース0は、文字列からのベースを整数リテラルとして解釈することを意味します。
>>> int('0b100', base=0)
4
これは、あなたは自分のプログラム全体もちろん
# There's no need to import sys; you never use it
#binary to decimal
# Your original program do the same thing in Python 2 and 3
print("Value:")
digits=input()
print(int(digits, 2))
を作ることができることを、そのバージョンは、Pythonを学ぶために始めてのあなたの規定の目的でのように良い仕事をしないことを意味します。万が一
'digits = x = x *(2 ** length)'?私には正しいとは思わないが、私はPythonを知らない。とにかく、失敗した入力と出力した例を挙げるべきです。 – hnefatl
なぜあなたはそれを反復処理中にリストを変更しようとしていますか?この目的のために – user2357112
@ user2357112 [1 * 2^2、0 * 2^1、0 * 2^0]だから配列を合計することができます – gethelplearning