Python编程输入错误

问题描述 投票:0回答:4

我正在尝试用 python 为作业编写一些代码。我在任何地方都找不到问题所在以及它无法运行的原因。它是感知和移动机器人定位功能。我不明白为什么这条线不起作用。

q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
  • hit = 两个字符串之间的比较。其计算结果为 true 或 false,即 1 或 0,对吗?
  • 传感器右= 0.7
Traceback (most recent call last):  
File "vm_main.py", line 26, in <module> import main  
File "/tmp/sbdxfjuois/main.py", line 50, in <module> p = sense(p, measurements[k])
File "/tmp/sbdxfjuois/main.py", line 34, in sense q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
TypeError: can't multiply sequence by non-int of type 'float'

您可以对我在这里发布的内容提出任何建议吗?

def sense(p, Z):
q = [ ]
for i in range(len(p)):
    hit = (Z == colors[i])
    q.append(p[i] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
s = sum(q)
for i in range(len(q)):
    q[i] = q[i]/s
return q
python compare comparison
4个回答
2
投票

正如其他人指出的那样,这个

p
变量显然是一个序列序列。您可以通过输入来验证这一点

print(type(p))
print(type(p[i]))

在追加语句之前。你可能会看到类似的东西

tuple
tuple

如果这是您所期望的,那么您将需要循环数组的另一个索引。另外,您的

q
是否需要以相同的形状返回?我怀疑你想要更多类似这样的东西。

def sense(p, Z):
    q = p[:]
    for i in range(len(p)):
        for j in range(len(p[i])):
            hit = (Z == colors[i])
            q[i][j] = (p[i][j] * (hit * sensor_right + (1 - hit) * (1-sensor_right)))
    s = sum(q)
    for i in range(len(q)):
        q[i] = q[i]/s
    return q

请注意,您可能还想研究 numpy 数组。


0
投票

如果您对其他变量的理解是正确的,那么它告诉您

p[i]
是一个序列(很可能是一个列表),它不能与浮点数相乘。也许
p[i]
不是你所期望的那样?

在引发错误的行之前尝试

print
ing
p[i]


0
投票

这里的问题是其他人所说的。只能将序列乘以 int,而不能乘以 float。 例如

>>> [1] * 3
[1, 1, 1]
>>> "f" * 6
ffffff
>>> [1] * 0.7
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'

仔细检查 p 的数据类型,以确保它应该是一个序列。如果这确实是 p 应该是的,那么请确保在相乘之前将以下内容转换为 int

(hit * sensor_right + (1 - hit) * (1-sensor_right))

0
投票

与@Mike所说的相关,你也可以这样做:

q = []
sum = 0
for i in p:
    sub_q = []
    for val in i:
        computed_val = val * (hit * sensor_right + (1 - hit) * (1-sensor_right))
        sum += computed_val
        sub_q.append(computed_val)
    q.append(sub_q)

我喜欢这一点,因为它更简洁,不必每次调用时都构建一堆范围,而且它还减少了迭代数据的次数,但每个范围都有自己的迭代次数。

© www.soinside.com 2019 - 2024. All rights reserved.