语法错误:无法将值赋给运算符

22
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 则是您所需字符串的长度。

6个回答

51

请确保变量名中不包含连字符(-)。

在Python中,变量名不允许使用连字符,因为它们被用作减法运算符。

例如:

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

22

Python感到不满,因为您试图向无法分配值的东西分配值。

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

当你使用赋值运算符时,你将右侧的值分配给左侧的变量或元素。在你的情况下,左侧没有变量或元素,而是一个解释出的值:你试图将一个值赋给不是“容器”的东西。
根据你所写的内容,你只是误解了这个运算符的工作方式。只需交换操作数,就像这样。
string += str(((t[1])/length) * t[1])

请注意,我已经将分配的值包装在 str 中,以便将其转换为 str,使其与被分配的 string 变量兼容。 (数字和字符串不能相加。)

这给了我一个类型错误 TypeError: 无法隐式地将 'float' 对象转换为字符串 有什么想法吗? - TheFoxx
是的。但这完全取决于您想让“string”看起来像什么。请根据您提供的示例输入详细说明“string”的值应该是什么。我已经猜测了您要寻找的内容,并修改了我的答案。 - cheeken

1

你应该使用 string += ((t[1])/length) * t[1],而不是 ((t[1])/length) * t[1] += string。(另一个语法问题 - int is not iterable - 请自行解决。)


我刚刚尝试了一下,它告诉我 TypeError: Can't convert 'float' object to str implicitly。 - TheFoxx
提示:在Python的for语句中,你不能以那种方式使用“distribution”。也许你的分布范围会更合适...? - Makoto

1

好的,正如错误所说,你在赋值语句的左侧有一个表达式(((t[1])/length) * t[1]),而不是一个变量名。你有这个表达式,然后告诉Python将string添加到它上面(它总是"")并将其分配给...哪里?((t[1])/length) * t[1]不是一个变量名,所以你不能将结果存储到其中。

你是想说string += ((t[1])/length) * t[1]吗?那样更有意义。当然,你仍然试图将数字添加到字符串中,或者乘以一个字符串...其中一个t[1]可能应该是t[0]


是的,应该是t[0],我的代码通常不会有这么多错误,我只是重新打了大约10次,试图弄清楚这个问题。 - TheFoxx

-2

你认为这段代码应该是什么意思:((t[1])/length) * t[1] += string

Python无法解析这个代码,它是一个语法错误。


其实它的意思是这样的,我刚刚意识到 ((t[1]/10)/length) * t[1]。基本上,它正在为每个字母计算分布,确定需要在生成的随机字符串中出现多少次该字母,然后将那么多个字母添加到名为string的空字符串中。 - TheFoxx
@user1048244:它是用来做什么的并不重要-按照所写的方式,它并不符合语法规则。 - Marcin

-8

只在Python中有效

a=4
b=3

i=a+b

哪个是 new 运算符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接