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
は、必要な文字列の長さです。
値を割り当てることができないものに値を割り当てようとしているため、Pythonが混乱しています。
((t[1])/length) * t[1] += string
代入演算子を使用する場合、右側にあるものの値を左側の変数または要素に代入します。あなたの場合、左側に変数や要素はなく、代わりに解釈された値があります。「コンテナ」ではない何かに値を割り当てようとしています。
あなたが書いたものに基づいて、あなたはこの演算子がどのように機能するかを単に誤解しています。オペランドを切り替えるだけです。
string += str(((t[1])/length) * t[1])
割り当てられた値をstr
にラップしてstr
に変換し、割り当てられているstring
変数と互換性があることに注意してください。 (数字と文字列を一緒に追加することはできません。)
それが誰かを助ける場合、変数にハイフンが含まれていると、ハイフンはPythonの変数名では許可されず、減算演算子として使用されるため、このエラーが表示されることがあります。
例:
my-variable = 5 # would result in 'SyntaxError: can't assign to operator'
エラーが言うように、代入の左側には変数名ではなく式(_((t[1])/length) * t[1]
_)があります。その式があり、Pythonにstring
を追加するように指示します(これは常に_""
_です)。そして、どこに割り当てますか?_((t[1])/length) * t[1]
_は変数名ではないため、結果をそこに格納することはできません。
もしかしてstring += ((t[1])/length) * t[1]
?それはもっと理にかなっています。もちろん、まだ文字列に数値を追加したり、文字列を乗算したりしています...これらの_t[1]
_の1つは、おそらく_t[0]
_でなければなりません。
_((t[1])/length) * t[1] += string
_の代わりに、string += ((t[1])/length) * t[1]
を使用する必要があります。 (もう1つの構文問題-_int is not iterable
_-を理解するための練習になります。)