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)
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)