这是python的bug还是我代码或算式有问题希望解答

将横列的数字输出为数列
源码

q=1
while q==1:#无限循环
    zz=input(("请输入您要转换的数字:"))#输入数字(zz)
    z=int(zz)#将输入数字转换为数字类型(z)
    ws=int(len(zz))#确定数位
    while ws>=1:
        a=z#将数值(z)复制到变量(z)用于是后期确定否循环 (a)用于计算
        b=int(a/(10**(ws-1)))#确定输入数字第一位(b)
        e=z/10#将(z)的小数点向后移动一位
        print(b)#显示第一位数
        z=a-(b*(10**(ws-1)))#(a)减去10的位数减二次方
        ws=ws-1

运行结果

请输入您要转换的数字:99999999999999999999
10
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-1

不信的话可以自己运行一下(注意数字一定要大并且所有数位全是9)

问题出在这一行
b=int(a/(10**(ws-1)))
用int强制转换小数到整数时,一般是向下取整的,但是当小数全是9,且位数足够多的时候,这里的强制转换结果就是10,所以就出现了你现在的问题
具体原因应该还是跟浮点数长度范围有关吧,你可以去查一下相关的资料
你这个问题要修正也很简单,改为:
b=a//(10**(ws-1))
即可,直接除出整数

如有帮助,请采纳!

q = 1
while q == 1:  # 无限循环
    zz = input(("请输入您要转换的数字:"))  # 输入数字(zz)
    z = int(zz)  # 将输入数字转换为数字类型(z)
    ws = int(len(zz))  # 确定数位
    while ws >= 1:
        a = z  # 将数值(z)复制到变量(z)用于是后期确定否循环 (a)用于计算
        b = a // (10 ** (ws - 1))  # 确定输入数字第一位(b)
        e = z / 10  # 将(z)的小数点向后移动一位
        print(b)  # 显示第一位数
        z = a - (b * (10 ** (ws - 1)))  # (a)减去10的位数减二次方
        ws = ws - 1

你想这样?

img

我比较想找到我的问题