我想把清单的长度打印到第一份副本上?

2024-06-11 00:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在这里创建了一个函数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。你知道吗

  1. 现在列表是[12110999]
  2. 这将继续下去,直到名单有独特的价值

我知道我的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")

Tags: key函数answermap列表defintreverse
1条回答
网友
1楼 · 发布于 2024-06-11 00:09:27

您的代码有两个(主要)问题。首先,您必须检查nom的完整列表,以确保没有重复项,而不是n之前的片,其中n是一个相当任意的数字。此外,还需要将列表条目保持为字符串,以确保将'0999'表示为字符串,而不是999。使用此更改ascenddescend不需要将输入转换为字符串,而是必须将结果转换为带前导零的字符串。你知道吗

此外,如果要查找重复模式的周期长度,必须在末尾添加几行,在原始列表中使用“找到的重复项”作为搜索值,以查找周期的第一个元素。你知道吗

因此,通过这些更改,代码看起来就像,最终打印来自循环:

def descend(n):
    listb = map(int, n)
    b = sorted(listb, key=int, reverse=False)
    asc = int(''.join(map(str, b)))
    return asc

def ascend(n):
    lista = map(int, n)
    a = sorted(lista, key=int, reverse=True)
    dsc = int(''.join(map(str, a)))
    return dsc

def answer(n):
    n_len = len(n)
    nums = []
    while n not in nums:
        final = nums.append(n)
        w = len(nums)
        x = ascend(n)
        y = descend(n)
        z = x - y
        n = "{:0{n_len}}".format(z, n_len=n_len)
        print w
        print nums
    first = nums.index(n)
    nums = nums[first:]
    w = len(nums)
    print w
    print nums

answer("1211")  

我希望这就是你想要的答案。你知道吗

相关问题 更多 >