鱼C论坛

 找回密码
 立即注册
查看: 1329|回复: 3

[已解决]Python类和对象Ⅲ的最后一题中

[复制链接]
发表于 2023-9-3 12:08:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[k] += 1

在这里,我们先使用setdefault()方法为字典d中的键k设置默认值为0,然后再对该键的值递增1。

希望这个修改能够解决你的问题。如果你还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[k] += 1

在这里,我们先使用setdefault()方法为字典d中的键k设置默认值为0,然后再对该键的值递增1。

希望这个修改能够解决你的问题。如果你还有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[k] += 1
    print(d)

这样修改后,代码将会正确执行,输出字典d,其中键表示菜名,值表示该菜点了多少次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

同样谢谢你,但是楼上那位先来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表