You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python eval为字典赋值时触发语法错误,请求技术帮助

Python eval赋值失败的解决办法

你的问题出在**eval()不能执行赋值语句**——它只能处理表达式(比如计算一个值的代码),而像Player0["Money"] = ...这种赋值属于语句,丢给eval就会报语法错误。

给你两种解决思路:


方法1:用exec代替eval

exec()函数可以执行任意Python语句,把你的eval换成exec就行:

Ship = ["1번 배","2번 배","3번 배","4번 배"]
Player0 = {'Money':10,'Ship':0}
Player1 = {'Money':10,'Ship':0}
Player2 = {'Money':10,'Ship':0}
Player3 = {'Money':10,'Ship':0}

for i in range(4):
    SelectShip = int(input("베팅할 배의 번호를 입력하세요 : "))
    BetMoney = int(input("베팅할 금액을 입력하세요 : "))

    SelectShip += 1

    exec('Player%d["Money"] = Player%d["Money"]-BetMoney'%(i,i))
    exec('Player%d["Ship"] = SelectShip' %i)

注:你代码里的global声明完全没必要,因为是在全局作用域直接定义变量,循环里只是修改字典内容,不需要额外声明全局。


方法2:用列表存储玩家(更推荐,更安全简洁)

单独定义Player0到Player3太繁琐,而且字符串拼接变量名容易出错,不如把所有玩家放进一个列表,直接通过索引访问:

Ship = ["1번 배","2번 배","3번 배","4번 배"]
# 生成4个初始状态一致的玩家字典
players = [{'Money':10, 'Ship':0} for _ in range(4)]

for i in range(4):
    SelectShip = int(input("베팅할 배의 번호를 입력하세요 : "))
    BetMoney = int(input("베팅할 금액을 입력하세요 : "))

    SelectShip += 1

    # 直接通过索引操作对应玩家,完全不用eval/exec
    players[i]['Money'] -= BetMoney
    players[i]['Ship'] = SelectShip

这种写法既避免了eval/exec的安全风险,代码可读性和维护性也更高,后续新增玩家只需调整列表长度即可。

内容的提问来源于stack exchange,提问作者lee seojin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:01:00