How to fix: TypeError: unsupported operand type(s) for /: 'str' and 'float'

How to fix: TypeError: unsupported operand type(s) for /: 'str' and '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" 是一个字典,包含所有球队的 运行ning 后卫和整体存储,如 'NYG':'Saquon Barkley 99' 其中包含姓名,然后是该球员的表现如何,从 0 开始-99。我这样存储它,以便我可以使用 [-2:] 来获取播放器的好坏,并使用 [:-2] 来获取播放器的名称。

“possession”就是有球权的球队,这样我就可以从前面提到的字典里翻出运行ning back的名字和技能了。

令我感到困惑的是,当除法中的两个参数都是浮点数而不是字符串时,我是如何得到前面提到的错误的。我已经尝试将 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
#                                           ^

除法不需要括号,因为/的优先级高于-(记住你的运算顺序)

您不能像 Python 那样组合字符串和数字。

rbs.get(possession)[-2:] 给你一个字符串,例如'99'float(30.0) 给你一个数字。字符串按数字划分没有定义

您必须先将“99”转换为数字,然后才能将其除以任何值。从技术上讲,您只需要在表达式中切换括号即可。

损坏:

round(random.uniform(float(rbs.get(possession)[-2:]/float(30.0))-2.5,float(rbs.get(possession)[-2:]/float(30.0))+5.5))

工作:

round(random.uniform(float(rbs.get(possession)[-2:])/float(30.0)-2.5,float(rbs.get(possession)[-2:])/float(30.0)+5.5))

但实际上,使用变量。上面的东西几乎不可读。

player_rating = float(rbs.get(possession)[-2:])
low = player_rating / 30 - 2.5
high = player_rating / 30 + 5.5
playdistance = round(random.uniform(low, high))

此外,一旦计算中的变量是浮点数,例如此处的 player_rating整个计算 将产生浮点数。 float(30.0) 之类的东西是完全没有必要的。

这解决了您需要在划分

之前转换为 float 的问题
import numpy

rbs={'NYG':'Saquon Barkley 99'
     }

playdistance = float(round(numpy.random.uniform(float(rbs.get(possession)[-2:])/float(30.0)-2.5,float(rbs.get(possession)[-2:])/float(30.0))+5.5)) 

print(playdistance)