“'int'对象没有'_getitem_'属性”对我的代码意味着什么?

-1 投票
3 回答
641 浏览
提问于 2025-04-18 16:44

我刚开始学习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__'

这个错误是什么意思,我该怎么解决呢?我知道这听起来像是在让你们帮我修代码,但我真的不知道这个错误的意思。

3 个回答

0

问题出在 input_a[0] 这部分,这个操作是想获取 input_a 的第一个元素。方括号其实是 __getitem__ 方法的简写。不过,input 返回的是一个普通的 int(整数),而整数是没有 __getitem__ 方法的。

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)

但是如果 input_a 不能转换成数字,这会引发一个 ValueError 异常,像这样:

>>> 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(

至于其他部分,因为这看起来像是作业,我就留给你自己去完成了。

1

input_a[0]input_a.__getitem__(0) 是一样的意思,这里你的 input_a 是一个 int(整数),而整数没有这个方法。
我觉得你是在用 Python 2.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

撰写回答