所以我在这里创建了一个函数answer,我要做的就是打印计数,直到列表有唯一的值。你知道吗
我所做的是:
第一步:我将一个数字x传递给一个函数。
第二步:创建x和y,它们只是x的升序和降序值。
第三步:我做了z=x-y,把z赋给n,n是n的新值
第4步:重复并在列表中存储值,直到列表唯一为止。你知道吗
例如:如果n=1211,那么x=2111,y=1112,因此z=2111-1112=0999,接下来n=0999。你知道吗
我知道我的answer函数有问题,因为它所做的只是从列表中删除重复的值并打印出来。 现在它正在运行一个无限循环,但不应该,因为答案是1,它在一个值之后重复。 你能告诉我如何改进我的代码,这样我就可以得到正确的计数吗?你知道吗
def dscend(n):
listb = map(int, str(n))
b = sorted(listb, key=int, reverse=False)
asc = int(''.join(map(str, b)))
return asc
def ascend(n):
lista = map(int, str(n))
a = sorted(lista, key=int, reverse=True)
dsc = int(''.join(map(str, a)))
return dsc
def answer(n):
nums = []
n = int(n)
while n not in nums[:n]:
final = nums.append(n)
w = len(nums)
x = ascend(n)
y = dscend(n)
z = x - y
n = z
print w
print nums
answer("1211")
您的代码有两个(主要)问题。首先,您必须检查nom的完整列表,以确保没有重复项,而不是
n
之前的片,其中n
是一个相当任意的数字。此外,还需要将列表条目保持为字符串,以确保将'0999'
表示为字符串,而不是999
。使用此更改ascend
和descend
不需要将输入转换为字符串,而是必须将结果转换为带前导零的字符串。你知道吗此外,如果要查找重复模式的周期长度,必须在末尾添加几行,在原始列表中使用“找到的重复项”作为搜索值,以查找周期的第一个元素。你知道吗
因此,通过这些更改,代码看起来就像,最终打印来自循环:
我希望这就是你想要的答案。你知道吗
相关问题 更多 >
编程相关推荐