错误:'int'对象不可订阅

Gal*_*aum 40 python type-conversion python-2.7

我正在尝试一段简单的代码,得到别人的名字和年龄,让他/她知道他们什么时候年满21岁......不考虑否定和所有这些,只是随机的.

我一直收到这个'int' object is not subscriptable错误.

name1 = raw_input("What's your name? ")
age1 = raw_input ("how old are you? ")
x = 0
int([x[age1]])
twentyone = 21 - x
print "Hi, " + name1+ " you will be 21 in: " + twentyone + " years."
Run Code Online (Sandbox Code Playgroud)

Jon*_*art 61

键入时x = 0,即创建新int变量(名称)并为其指定零.

当您键入x[age1]试图访问age1'th条目时,就好像x是一个数组.

  • 实际解释正在发生的事情的唯一答案应该在顶部. (8认同)

Cha*_*les 35

问题在于,

int([x[age1]])
Run Code Online (Sandbox Code Playgroud)

你想要的是什么

x = int(age1)
Run Code Online (Sandbox Code Playgroud)

您还需要将int转换为输出的字符串...

print "Hi, " + name1+ " you will be 21 in: " + str(twentyone) + " years."
Run Code Online (Sandbox Code Playgroud)

完整的脚本看起来像,

name1 = raw_input("What's your name? ")
age1 = raw_input ("how old are you? ")
x = 0
x = int(age1)
twentyone = 21 - x
print "Hi, " + name1+ " you will be 21 in: " + str(twentyone) + " years."
Run Code Online (Sandbox Code Playgroud)

  • `x = 0`行是多余的. (12认同)
  • 正确,不需要该行。然而,为了清楚起见,我只修改了包含错误的部分。 (8认同)
  • 是的。这是蟒蛇。我们为您不必声明变量而感到自豪! (2认同)

TJD*_*TJD 8

当你写作时x = 0,x是一个int ...所以你不能这样做x[age1]因为xint


Bip*_*pin 5

'int' 对象不可下标是 Python 中的 TypeError。为了更好地理解此错误是如何发生的,让我们考虑以下示例:

list1 = [1, 2, 3]
print(list1[0][0])
Run Code Online (Sandbox Code Playgroud)

如果我们运行代码,您将在 Python3 中收到相同的 TypeError。

TypeError: 'int' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

这里列表的索引超出范围。如果代码修改为:

print(list1[0])
Run Code Online (Sandbox Code Playgroud)

输出将为 1(因为 Python 列表中的索引从零开始),因为现在列表的索引在范围内。

1
Run Code Online (Sandbox Code Playgroud)

当代码(与问题一起给出)运行时,会发生 TypeError 并且它指向代码的第 4 行:

int([x[age1]])
Run Code Online (Sandbox Code Playgroud)

目的可能是创建一个整数列表(尽管根本不需要为单个数字创建列表)。所需要的是将输入(依次转换为整数)分配给变量。

因此,最好这样编码:

name = input("What's your name? ")
age = int(input('How old are you? '))
twenty_one = 21 - age
if(twenty_one < 0):
    print('Hi {0}, you are above 21 years' .format(name))
elif(twenty_one == 0):
    print('Hi {0}, you are 21 years old' .format(name))
else:
    print('Hi {0}, you will be 21 years in {1} year(s)' .format(name, twenty_one))
Run Code Online (Sandbox Code Playgroud)

输出:

What's your name? Steve
How old are you? 21
Hi Steve, you are 21 years old
Run Code Online (Sandbox Code Playgroud)