Python:用螺旋提取法定义一个n - 寄生数

2024-10-02 00:43:31 发布

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

赋值:编写一个包含两个自然数n和k的corkscrew函数。该函数必须返回以应用corkscrew方法得到的数字k结尾的n-寄生数。函数可以假设n和k都是一位数的自然数,k≥n

示例:

corkscrew (5, 7)
                  5 x 7 = 35
                 5 x 57 = 285
                5 x 857 = 4285
               5 x 2857 = 14285
              5 x 42857 = 214285
             5 x 142857 = 714285

问题:我的代码在for循环中,因此res的结果不会改变,也不会演变成n-寄生数。你知道吗

def parasitic(number):
    """
    >>> parasitic(179487)
    4
    >>> parasitic(142857)
    5
    >>> parasitic(105263157894736842)
    2
    >>> parasitic(1234)
    0
    """

    for n in range(2, 11):
        res = n * number
        if str(number)[-1] + str(number)[:-1] == str(res):
            return n
    return 0

def corkscrew(n, number):
    """
    >>> corkscrew(4, 7)
    179487
    >>> corkscrew(5, 7)
    142857
    >>> corkscrew(2, 2)
    105263157894736842
    """


    res = n * number
    count = 0

    for i in range(1, n):
        res = n * (str(res)[-i:] + str(number))
        count += 1
        if parasitic(number) == n:
            return rotateLeft(res)



def rotateLeft(number):
    """
    >>> rotateLeft(717948)
    179487
    >>> rotateLeft(142857)
    428571
    >>> rotateLeft(105263157894736842)
    52631578947368421
    """

    k = str(number)
    letter = k[:1]
    numb = k[1:]
    resultaat = str(numb) + str(letter)
    return int(resultaat)

Tags: 函数innumberforreturnifdefcount
1条回答
网友
1楼 · 发布于 2024-10-02 00:43:31

回答有效的问题:

def corkscrew(n, number):
    """
    >>> corkscrew(4, 7)
    179487
    >>> corkscrew(5, 7)
    142857
    >>> corkscrew(2, 2)
    105263157894736842
    """


    res = n * number
    count = 0

    for i in range(0, 65):
        numb = (str(res)[-i:] + str(number))
        numb = int(numb)
        res = n * numb
        count += 1
        if parasitic(numb) == n:
            return numb

相关问题 更多 >

    热门问题