我正在编写一个程序,该程序将遍历所有四个数字并以升序排列其数字以创建另一个数字,然后将其全部以降序排列。减去这些应该得到另一个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
。
答案 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