【问题标题】:TypeError: can't multiply sequence by non-int of type 'str'TypeError:不能将序列乘以“str”类型的非整数
【发布时间】:2010-11-15 08:10:02
【问题描述】:
>>> 
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'

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

【问题讨论】:

    标签: python


    【解决方案1】:
    >>> '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),但是在 执行一些操作之后转换为 Decimal 并没有多大意义浮点数学并然后转换回float

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您正在使用 raw_input() 获取输入。 而是使用 input()。它将返回一个 Int。确保您只输入数字,否则 input() 将引发错误(例如在字符串的情况下)。 此外,如果您正确命名变量,那就太好了。 x 和 y 没有传达太多信息。 (速度和角度会好很多)

        【讨论】:

        • 我建议使用 raw_input() 而不是 input() 并转换为 float(或 "try:" 来转换它或引发错误),因为它不太容易出错。当前的 input() 计划在以后的 python 版本中删除。
        • 记录一下,raw_input 被 input() 替换了
        猜你喜欢
        • 1970-01-01
        • 2019-04-12
        • 2021-08-07
        • 2017-12-01
        • 2020-12-17
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多