urbanlife 发表于 2023-9-3 12:08:16

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

为什么会出现这个报错呢?
要怎么合理的修改

陶远航 发表于 2023-9-3 12:08:30

在你的代码中,出现了一个语法错误。该错误是因为在使用增强赋值操作符+=时,你将其用于函数调用上,而这是不合法的。

具体来说,问题出在这一行代码上:

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。

希望这个修改能够解决你的问题。如果你还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-9-3 12:08:31

这个报错是因为在代码中使用了增量赋值运算符(+=)来更新字典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,其中键表示菜名,值表示该菜点了多少次。

urbanlife 发表于 2023-9-3 12:24:15

isdkz 发表于 2023-9-3 12:08
这个报错是因为在代码中使用了增量赋值运算符(+=)来更新字典d的值,但是在增量赋值运算符的左侧使用了函 ...

同样谢谢你,但是楼上那位先来
页: [1]
查看完整版本: Python类和对象Ⅲ的最后一题中