синтаксическая ошибка: невозможно назначить оператору - PullRequest
7 голосов
/ 22 января 2012
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 - это длина строки, которую вы хотите.

Ответы [ 5 ]

10 голосов
/ 22 января 2012

Python расстроен, потому что вы пытаетесь присвоить значение чему-то, чему нельзя присвоить значение.

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

Когда вы используете оператор присваивания, вы присваиваете значение того, что находится справа, переменной или элементу слева. В вашем случае слева нет переменной или элемента, а есть интерпретируемое значение: вы пытаетесь присвоить значение чему-то, что не является «контейнером».

Исходя из того, что вы написали, вы просто не понимаете, как работает этот оператор. Просто переключи свои операнды, вот так.

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

Обратите внимание, что я обернул присвоенное значение в str, чтобы преобразовать его в str, чтобы оно было совместимо с переменной string, которой оно назначается. (Числа и строки не могут быть добавлены вместе.)

1 голос
/ 22 января 2012

Ну, как говорится в ошибке, у вас есть выражение (((t[1])/length) * t[1]) в левой части присваивания, а не имя переменной. У вас есть это выражение, и затем вы говорите Python добавить string к нему (который всегда "") и назначить его ... где? ((t[1])/length) * t[1] не является именем переменной, поэтому вы не можете сохранить в нем результат.

Вы имели в виду string += ((t[1])/length) * t[1]? Это имело бы больше смысла. Конечно, вы все еще пытаетесь добавить число к строке или умножить на строку ... один из этих t[1] s, вероятно, должен быть t[0].

0 голосов
/ 12 августа 2016

в питоне работают только

a=4
b=3

i=a+b

который я новый оператор

0 голосов
/ 22 января 2012

Вместо ((t[1])/length) * t[1] += string, вы должны использовать string += ((t[1])/length) * t[1]. (Другая проблема с синтаксисом - int is not iterable - будет вашим упражнением для выяснения.)

0 голосов
/ 22 января 2012

Как вы думаете, это должно быть: ((t[1])/length) * t[1] += string

Python не может разобрать это, это синтаксическая ошибка.

...