python - 如何修复:TypeError:/: 'str' 和 'float' 不支持的操作数类型
问题描述
TypeError: unsupported operand type(s) for /: 'str' and 'float'
我正在制作一场足球比赛,每当我尝试运行以下代码来确定一场比赛会走多远时,我都会得到这个。
playdistance = round(random.uniform(float(rbs.get(possession)[-2:]/float(30.0))-2.5,float(rbs.get(possession)[-2:]/float(30.0))+5.5))
“rbs”是一个字典,包含所有球队的跑卫和整体存储,就像'NYG':'Saquon Barkley 99'
它包含名称的位置一样,然后该球员的表现如何,范围从 0 到 99。我这样存储它,以便我可以使用 [-2:] 来了解播放器的性能,并使用 [:-2] 来获取播放器的名称。
“控球”是拥有球权的球队,所以我可以从前面提到的字典中提取跑卫的名字和技术。
我感到困惑的是,当除法中的两个参数都是浮点数且字符串都不是时,我如何得到前面提到的错误。我尝试将 30 除数转换为字符串、浮点数,并且我也为第一个参数做到了这一点。
我敢肯定这是一个非常愚蠢的问题,因为我对编码和 python 还很陌生,但是如果有人可以帮助我,那就太棒了。
解决方案
当我缩进您的代码以使其更具可读性时,问题变得很明显
playdistance = round(
random.uniform(
float(
rbs.get(possession)[-2:] / float(30.0) # error 1
) - 2.5, float(
rbs.get(possession)[-2:] / float(30.0) # error 2
) + 5.5
)
)
rbs.get(possession)[-2:]
是一个字符串。我看到您正在尝试将其转换为浮点数,但这需要完成
float(rbs.get(possession)[-2:]) / float(30.0) - 2.5
# ^
不是
float(rbs.get(possession)[-2:] / float(30.0)) - 2.5
# ^
没有必要给除法加上括号,因为/
它的优先级高于-
(记住你的操作顺序)
推荐阅读
- ios - API 未在 Swift for iOS 中显示数据
- css - 如何在没有任何样式问题的情况下链接到另一个页面中的位置?
- python - 告诉 Flask 仅将上传内容存储在内存中,而不使用临时文件
- wordpress - 想在 wordpress 上显示我的世界玩家统计数据吗?
- python - 无法在用户函数上使用 np.where() 在熊猫数据框中创建新列
- go - 具有通用功能但功能参数不同的 API 的通用接口
- shell - 如何使用 GitHub API 在 GitHub 组织中检索 1000 多个存储库的列表
- r - 将 IF 条件从 Excel 转换为 R
- angular - 在 angular.json 中将 buildOptimizer 设置为 true 会导致应用程序无法正常工作
- c++ - CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, PID) 返回 INVALID_HANDLE_VALUE