Python类和对象Ⅲ的最后一题中
def order():menu = ['洋葱炒牛肉','洋葱炒羊肉','煎蛋','番茄炒蛋','土豆萝卜炖羊肉']
new_menu = enumerate(menu,start=1)
print('客官你想吃什么?')
i = input('1.洋葱炒牛肉;2.洋葱炒羊肉;3.煎蛋;4.番茄炒蛋;5.土豆萝卜炖羊肉:')
order1 = i.split()
d = {}
for v,k in list(new_menu):
for i in order1:
if v is i:
d.setdefault(k,0) += 1# d 标红
print(order2)
SyntaxError: 'function call' is an illegal expression for augmented assignment
为什么会出现这个报错呢?
要怎么合理的修改
在你的代码中,出现了一个语法错误。该错误是因为在使用增强赋值操作符+=时,你将其用于函数调用上,而这是不合法的。
具体来说,问题出在这一行代码上:
d.setdefault(k,0) += 1
增强赋值操作符+=需要一个可变对象作为左操作数,但setdefault()方法返回的是一个新的值,而不是可变对象。因此,你无法将其与+=操作符结合使用。
要解决这个问题,你可以将增强赋值操作符拆分为两个步骤,首先获取字典中的值,然后再递增它。修改后的代码如下所示:
for v, k in list(new_menu):
for i in order1:
if v == int(i):# 将字符串转换为整数进行比较
d.setdefault(k, 0)
d += 1
在这里,我们先使用setdefault()方法为字典d中的键k设置默认值为0,然后再对该键的值递增1。
希望这个修改能够解决你的问题。如果你还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案 这个报错是因为在代码中使用了增量赋值运算符(+=)来更新字典d的值,但是在增量赋值运算符的左侧使用了函数调用表达式(d.setdefault(k,0)),这是不允许的。
要修复这个问题,可以将增量赋值运算符改为普通的赋值运算符,并在赋值语句之前调用setdefault()函数来设置字典d的初始值。代码修改如下:
def order():
menu = ['洋葱炒牛肉','洋葱炒羊肉','煎蛋','番茄炒蛋','土豆萝卜炖羊肉']
new_menu = enumerate(menu,start=1)
print('客官你想吃什么?')
i = input('1.洋葱炒牛肉;2.洋葱炒羊肉;3.煎蛋;4.番茄炒蛋;5.土豆萝卜炖羊肉:')
order1 = i.split()
d = {}
for v,k in list(new_menu):
for i in order1:
if v == int(i):
d.setdefault(k, 0)
d += 1
print(d)
这样修改后,代码将会正确执行,输出字典d,其中键表示菜名,值表示该菜点了多少次。 isdkz 发表于 2023-9-3 12:08
这个报错是因为在代码中使用了增量赋值运算符(+=)来更新字典d的值,但是在增量赋值运算符的左侧使用了函 ...
同样谢谢你,但是楼上那位先来
页:
[1]