Python TypeError:“int”对象不可下标,因为y=int(x[2:4])

Python TypeError:“int”对象不可下标,因为y=int(x[2:4]),python,python-3.x,Python,Python 3.x,我想将6位数字与其2位中心数字相乘,但在计算发生的循环中会引发异常: TypeError:“int”对象不可下标,因为y=intx[2:4] TypeError:“int”对象不可下标,因为 y=intx[2:4] 如何更正此错误 x=input("Enter a numer of at least 6 digits: ") while len(x)!=6: x=input("Enter a numer of at least 6 digits: ") x1=int(x) z=int(

我想将6位数字与其2位中心数字相乘,但在计算发生的循环中会引发异常:

TypeError:“int”对象不可下标,因为y=intx[2:4]

TypeError:“int”对象不可下标,因为 y=intx[2:4] 如何更正此错误

x=input("Enter a numer of at least 6 digits: ")
while len(x)!=6:
    x=input("Enter a numer of at least 6 digits: ")

x1=int(x)
z=int(input("How many times do you want to repeat the procces? "))
r=range(z)

for i in r:
    y=int(x[2:4])
    x=y*x1
    print(x)
您只需将x转换为str,提取中间数字,然后将它们转换回int

按如下方式修改您的代码:

对于r中的i: y=intstrx[2:4] x=y*x1 printx 编辑 正如@byxor所指出的,您不应该更改变量x的类型:

对于r中的i: y=intx[2:4] x=stry*intx printx 旁注
虽然你想得到中间的两位数,然后用x乘以z。您的数字x可能超过6位,您将不再选择中间的2位数字。此解决方案最多只能修复错误。

是否尝试从数字中分割出数字?在循环的第一次迭代中,x是字符串。一旦你设置了x=y*x1,x就变成了一个整数。你必须把它重新设置成一个字符串。一种方法是通过x=strx,可以互换使用x和x1,其中一个是int,另一个是string。然后将x转换为intx,这就是人们喜欢静态类型检查的原因。它会阻止您通过拒绝编译将字符串更改为int。这很好,也可以完成这项工作,但请注意,更改现有变量的类型不是一个好的做法。谢谢,作为对旁注的回答,我没有发布它,但其中一条说明是从前6位中选择中间的2位。非常感谢。我会和我的老师谈谈,让他告诉我如何避免改变变量的类型,谢谢,@byxor