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是一个数组.
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)
'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)