我刚开始使用Python,作为初学者,我正在尝试制作一个计算器(只有四个函数) 所以这是代码:
input_start = input("press 1 to perform addition press 2 to perform subtraction press 3 to perform multiplication press 4 to perform division press 5 to quit")
if input_start == 1:
input_a = input("put your first number here:")
print input_a
if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0):
input_b = input("put your second number here:")
print input_b
if int(input_b[0]) == (1,2,3,4,5,6,7,8,9,0):
print input_a + input_b
else:
print "invalid"
else:
print "invalid"
print input_start
对于其他功能来说就像这样。当我运行它时,会出现此错误:
Traceback (most recent call last):
File "C:\Users\Baik\Desktop\python projects\calculator.py", line 6, in <module>
if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0):
TypeError: 'int' object has no attribute '__getitem__'
错误意味着什么,我该如何解决?我知道这听起来好像我要求你们修改我的代码,但我不知道这个错误意味着什么。
答案 0 :(得分:1)
input_a[0]
等于input_a.__getitem__(0)
,此处input_a
是int
,并且它没有这样的方法。
我认为你使用的是python2.x,input
函数会自动解析输入,如果它是一个数字。
input_start = input("press 1 to perform addition press 2 to perform subtraction press 3 to perform multiplication press 4 to perform division press 5 to quit")
if input_start == 1:
input_a = input("put your first number here:")
print input_a
if isinstance(input_a, int):
input_b = input("put your second number here:")
print input_b
if isinstance(input_b, int):
print input_a + input_b
else:
print "invalid"
else:
print "invalid"
print input_start
答案 1 :(得分:0)
问题是input_a[0]
- 这会尝试获取input_a
的第一个索引。方括号对于__getitem__
方法来说确实很短。但是,input
会返回纯int
,但没有__getitem__
方法。
答案 2 :(得分:0)
此错误表示您无法对整数执行[0]
:
>>> 5[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'
由于您使用的是input
,因此任何有效类型的代码都将自动转换。这意味着如果用户在提示“将您的第一个号码放在此处:”时键入5,则python会将其作为号 5
,而不是字符串 '5'
。
你还有很多其他问题,主要是这一行:
if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0)
这不符合您的想法。我怀疑你想说“如果input_a是1或2或3或4或5或6或7或8或9或0,但它实际做的是”如果索引处项目的整数值名称input_a
指向的0与元组(1,2,3,4,5,6,7,8,9,0)
“
如果您想说如果输入介于0到9 之间,那么您可以这样做:
if 0 < input_a < 9:
# do something
如果您想检查输入是否为数字,可以尝试转换它:
input_a = int(input_a)
但如果ValueError
无法转换为数字,则会引发input_a
异常,如下所示:
>>> input_a = 'hello'
>>> int(input_a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'hello'
检查输入是否为数字的另一种方法是使用字符串的isdigit()
方法:
>>> input_a = '5'
>>> input_a.isdigit()
True
请注意,如果值已经是数字,则无效,因为数字没有isdigit()
方法:
>>> input_a = 5
>>> input_a.isdigit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'isdigit'
因此,为了让您的生活轻松,您需要先将输入转换为字符串。为此,请将input(
替换为raw_input(
。
其余的,因为这看起来像家庭作业,我留给你。