为什么这段简单的代码不起作用

时间:2017-04-24 01:13:27

标签: python

我的这个程序有错误。你能帮我解释发生了什么,因为系统似乎把我的变量混淆为字符串。我试过改变变量,但似乎总是停止工作。

# Area of rectangle
a = input("What is the length of side a in centimeters")
b = input("What is the length of side b in centimeters")
area = a * b
print(area)

它给了我这个回复

line 5, in <module>
    area = a * b
TypeError: can't multiply sequence by non-int of type 'str'

鉴于我的业余编码状态,我从中得到的是它试图在没有字符串的地方繁殖字符串。

4 个答案:

答案 0 :(得分:3)

之前的答案是正确的,因为简单的解决方法是将输入转换为<%= f.input :birthdate, as: :date, start_year: Date.today.year - 20, end_year: Date.today.year, order: [:month, :day, :year], label: t(".birthdate") %> 值。但是,这个错误有点神秘:

  

TypeError:不能将序列乘以'str'

类型的非int

并且值得解释。

这里发生的事情是python将字符串理解为一系列字符。即使是单个字符也是如此,例如int或没有字符,例如'a' - 您通常不会在python中使用底层字符类型。

事实证明,在python中你可以将一个序列 - 一个列表或一个元组或一些这样的序列 - 乘以数值''来重复该序列n次:

n

所以你可以用字符串来做到这一点:

>>> [1, 2, 3] * 5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

但你不能将序列乘以另一个序列:

>>> "abc" * 3
'abcabcabc'

并且正如预期的那样,当我们尝试将字符串乘以字符串时会出现相同的错误:

>>> [1, 2, 3] * ['a', 'b', 'c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'list'

即使两个字符串看起来都像数字:

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

我希望这有助于您不仅了解如何修复错误,还要了解错误的开始。

答案 1 :(得分:1)

您需要将输入转换为int / float。

input返回一个字符串,因此您需要像这样强制转换它:

int(a) * int(b)

答案 2 :(得分:1)

input()将给定的数字作为字符串读取。在进行任何算术计算之前,您必须转换为数字

a = int(input("What is the length of side a in centimeters"))
b = int(input("What is the length of side b in centimeters"))
area = a * b
print(area)

OR

a = input("What is the length of side a in centimeters")
b = input("What is the length of side b in centimeters")
area = int(a) * int(b)
print(area)

注意: 您可以简化代码(如果需要):

 a = int(input("What is the length of side a in centimeters"))
 b = int(input("What is the length of side b in centimeters"))
 print(a*b)

答案 3 :(得分:0)

# Area of rectangle
a = input("What is the length of side a in centimeters")
b = input("What is the length of side b in centimeters")
#convert input to int.
area = int(a) * int(b)
print(area)