TypeError:不能将序列乘以'str'类型的非int

时间:2009-07-30 06:15:36

标签: python

>>> 
Enter muzzle velocity (m/2): 60
Enter angle (degrees): 45
Traceback (most recent call last):
  File "F:/Python31/Lib/idlelib/test", line 9, in <module>
    range()
  File "F:/Python31/Lib/idlelib/test", line 7, in range
    Distance = float(decimal((2*(x*x))((decimal(math.zsin(y)))*(decimal(math.acos(y)))))/2)
TypeError: can't multiply sequence by non-int of type 'str'

我只是新手,所以如果真的很明显,请不要太苛刻,但为什么我会收到此错误?

3 个答案:

答案 0 :(得分:6)

>>> '60' * '60'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'

您正在尝试将两个字符串相乘。您必须使用int()float()将用户的字符串输入转换为数字。

另外,我不确定你用decimal做了什么;看起来你正试图调用模块(类型是 in 模块,decimal.Decimal)但是在之后转换为十进制没有多大意义做一些浮点数学,然后转换回float

将来发布导致问题的代码(并保持交互和追溯)。但首先尝试尽可能缩小代码,同时确保它仍然导致错误。这是调试中的重要一步。

答案 1 :(得分:5)

您应该将从控制台获得的数据转换为整数:

x = int(x)
y = int(y)
Distance = float(decimal((2*(x*x))((decimal(math.zsin(y)))*(decimal(math.acos(y)))))/2)

答案 2 :(得分:0)

您正在使用raw_input()来获取输入。 而是使用input()。它将返回一个Int。确保只输入数字或输入()将引发错误(例如在字符串的情况下)。 另外,如果你正确命名变量会很好。 x和y不会传达太多。 (速度和角度会好得多)