我的这个程序有错误。你能帮我解释发生了什么,因为系统似乎把我的变量混淆为字符串。我试过改变变量,但似乎总是停止工作。
# 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'
鉴于我的业余编码状态,我从中得到的是它试图在没有字符串的地方繁殖字符串。
答案 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)