首页 > 解决方案 > 如何修复: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 还很陌生,但是如果有人可以帮助我,那就太棒了。

标签: pythonstringdivision

解决方案


当我缩进您的代码以使其更具可读性时,问题变得很明显

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
#                                           ^

没有必要给除法加上括号,因为/它的优先级高于-(记住你的操作顺序)


推荐阅读