web-dev-qa-db-ja.com

構文エラー:演算子に割り当てられません

def RandomString (length,distribution):
    string = ""
    for t in distribution:
        ((t[1])/length) * t[1] += string
    return shuffle (string)

これは、タイトルで説明されている構文エラーを返します。この例では、distributionはタプルのリストであり、各タプルには文字とその分布が含まれています。リストからのすべての分布は合計で100になります。次に例を示します。

[("a",50),("b",20),("c",30)] 

lengthは、必要な文字列の長さです。

11
TheFoxx

値を割り当てることができないものに値を割り当てようとしているため、Pythonが混乱しています。

((t[1])/length) * t[1] += string

代入演算子を使用する場合、右側にあるものの値を左側の変数または要素に代入します。あなたの場合、左側に変数や要素はなく、代わりに解釈された値があります。「コンテナ」ではない何かに値を割り当てようとしています。

あなたが書いたものに基づいて、あなたはこの演算子がどのように機能するかを単に誤解しています。オペランドを切り替えるだけです。

string += str(((t[1])/length) * t[1])

割り当てられた値をstrにラップしてstrに変換し、割り当てられているstring変数と互換性があることに注意してください。 (数字と文字列を一緒に追加することはできません。)

12
cheeken

それが誰かを助ける場合、変数にハイフンが含まれていると、ハイフンはPythonの変数名では許可されず、減算演算子として使用されるため、このエラーが表示されることがあります。

例:

my-variable = 5   # would result in 'SyntaxError: can't assign to operator'
8
Anupam

エラーが言うように、代入の左側には変数名ではなく式(_((t[1])/length) * t[1]_)があります。その式があり、Pythonにstringを追加するように指示します(これは常に_""_です)。そして、どこに割り当てますか?_((t[1])/length) * t[1]_は変数名ではないため、結果をそこに格納することはできません。

もしかしてstring += ((t[1])/length) * t[1]?それはもっと理にかなっています。もちろん、まだ文字列に数値を追加したり、文字列を乗算したりしています...これらの_t[1]_の1つは、おそらく_t[0]_でなければなりません。

1
kindall

_((t[1])/length) * t[1] += string_の代わりに、string += ((t[1])/length) * t[1]を使用する必要があります。 (もう1つの構文問題-_int is not iterable_-を理解するための練習になります。)

0
Makoto