类型错误:无法将序列乘以非整数类型的'str

3 投票
3 回答
128522 浏览
提问于 2025-04-15 13:16
>>> 
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

你现在用的是raw_input()来获取输入。其实可以用input(),这样它会返回一个整数。记得只输入数字,不然input()会报错(比如你输入了字符串)。另外,给你的变量起个好名字也很重要。像x和y这样的名字不太清楚,叫velocity和angle就好多了。

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 做什么;看起来你是想调用这个模块(它的类型是 模块里,decimal.Decimal),但在做完浮点数运算后再转换成 Decimal,然后再转换回 float,其实没什么意义。

以后如果遇到问题,记得把导致问题的代码贴出来(并保留交互和错误追踪信息)。不过首先尽量把代码缩小到最小,同时确保它仍然能引发错误。这是调试过程中的一个重要步骤。

10

你应该把从控制台获取的数据转换成整数:

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

撰写回答