如何修复TypeError:“ NoneType”不可迭代?

时间:2019-08-30 02:38:58

标签: python-3.x

我正在编写一个程序,该程序将遍历所有四个数字并以升序排列其数字以创建另一个数字,然后将其全部以降序排列。减去这些应该得到另一个4数字。重复此过程几次,最终得到的数字为6174。我希望我的程序针对所有4位数字对此进行测试。

我已经在Python控制台中尝试过[str(i) for i in bigdigits]和其他命令行,但效果很好。但是我无法在实际程序中使用它。

我尝试调试此结果,但没有结果。以及打印出变量的所有部分结果。打印所有列表的结果为“无”。

counter = 1000
while counter != 10000:
    digits = [int(x) for x in str(counter)]
    bigdigits = digits.sort(reverse = True)
    smalldigits = digits.sort()

    strbigdigs = [str(i) for i in bigdigits]
    bignum = int("".join(strbigdigs))

    strsmalldigs = [str(j) for j in smalldigits]
    smallnum = int("".join(smalldigits))

    partialanswer = bignum - smallnum
    print(partialanswer)

例如,如果计数器为2019,则数字应为[2, 0, 1, 9],大数字应为[9, 2, 1, 0]。那么strbigdigs将是['9', '2', '1', '0']。最后,bignum为9210

1 个答案:

答案 0 :(得分:0)

您的代码有问题

  • list.sort将对列表进行排序,并返回None(改为使用sorted)。

  • smallnum = int("".join(smalldigits))应该是smallnum = int("".join(strsmalldigs))

  • 在循环结束时,应为counter赋予partialanswer的值。

  • 由于您知道它总是会在6174处停止,因此请将其放入while循环测试中。


counter = 2019

while counter != 6174:
    digits = [int(x) for x in str(counter)]
    bigdigits = sorted(digits, reverse = True)
    smalldigits = sorted(digits)

    strbigdigs = [str(i) for i in bigdigits]
    bignum = int("".join(strbigdigs))

    strsmalldigs = [str(j) for j in smalldigits]
    smallnum = int("".join(strsmalldigs))

    partialanswer = bignum - smallnum
    print(partialanswer)
    counter = partialanswer

输出:

9081
9621
8352
6174