如何修复 TypeError:'int' 对象不可下标
- 2025-03-12 08:50:00
- admin 原创
- 114
问题描述:
我正在尝试一段简单的代码,获取某人的姓名和年龄,并让他/她知道他们何时年满 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."
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[34], line 4
2 age1 = input ("how old are you? ")
3 x = 0
----> 4 int([x[age1]])
5 twentyone = 21 - x
6 print "Hi, " + name1+ " you will be 21 in: " + twentyone + " years."
TypeError: 'int' object is not subscriptable
解决方案 1:
当您键入时x = 0
,将创建一个新int
变量(名称)并为其分配零。
当您键入时x[age1]
,正在尝试访问age1
第'个条目,就像x
一个数组一样。
解决方案 2:
问题出在这条线上,
int([x[age1]])
你想要的是
x = int(age1)
您还需要将 int 转换为字符串以便输出......
print "Hi, " + name1+ " you will be 21 in: " + str(twentyone) + " years."
完整的脚本如下:
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."
解决方案 3:
'int' 对象不可下标,在 Python 中是 TypeError。为了更好地理解此错误是如何发生的,让我们考虑以下示例:
list1 = [1, 2, 3]
print(list1[0][0])
如果我们运行代码,您将在 Python3 中收到相同的 TypeError。
TypeError: 'int' object is not subscriptable
这里列表的索引超出了范围。如果将代码修改为:
print(list1[0])
输出将为 1(因为 Python 列表中的索引从零开始),因为现在列表的索引在范围内。
1
当运行代码(与问题一起给出)时,会发生 TypeError 并指向代码的第 4 行:
int([x[age1]])
目的可能是创建一个整数列表(尽管根本不需要为单个数字创建列表)。所需的只是将输入(反过来转换为整数)分配给变量。
因此,最好按如下方式编码:
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))
输出:
What's your name? Steve
How old are you? 21
Hi Steve, you are 21 years old
解决方案 4:
当你写的时候x = 0
,x
是一个 int...所以你不能这样做,x[age1]
因为x
是int
解决方案 5:
您在这里想做什么:int([x[age1]])
?? 这毫无意义。
您只需将年龄输入转换为int
:
name1 = raw_input("What's your name? ")
age1 = raw_input ("how old are you? ")
twentyone = 21 - int(age1)
print "Hi, %s you will be 21 in: %d years." % (name1, twentyone)
解决方案 6:
您需要先将 age1 转换为 int,以便进行减法运算。然后将结果转回字符串进行显示:
name1 = raw_input("What's your name? ")
age1 = raw_input ("how old are you? ")
twentyone = str(21 - int(age1))
print "Hi, " + name1+ " you will be 21 in: " + twentyone + " years."
解决方案 7:
name1 = input("What's your name? ")
age1 = int(input ("how old are you? "))
twentyone = str(21 - int(age1))
if age1<21:
print ("Hi, " + name1+ " you will be 21 in: " + twentyone + " years.")
else:
print("You are over the age of 21")
解决方案 8:
这样就简单多了;
name = input("What's your name? ")
age = int(input("How old are you? "))
print ("Hi,{0} you will be 21 in {1} years.".format(name, 21 - age))`
解决方案 9:
x 已经是整数(x=0),而您再次尝试使 x 再次成为整数,并且您给出的索引超出了限制,因为 x 已经只有一个索引(0),而您尝试给出与年龄相同的索引,所以这就是您收到此错误的原因。使用这个简单的代码
name1 = input("What's your name? ")
age1 = int(input ("how old are you?" ))
x=0
twentyone = str(21-age1)
print("Hi, " +name1+ " you will be 21 in: " + twentyone + " years.")
解决方案 10:
嗯,所有这些答案都是正确的,但这里有一个更现代的方法!
name1 : str = input("What's your name? ")
age1 : int = int(input ("how old are you? "))
twentyone : int = 21 - age1
print('Hi, {}, you will be 21 in: {} years'.format(name1, age1))
扫码咨询,免费领取项目管理大礼包!