Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:寄生数_Python - Fatal编程技术网

Python:寄生数

Python:寄生数,python,Python,通常,可以乘以n的正自然数 将最右边的数字移到数字的前面称为n -寄生数。这里n本身是一个一位数的正自然数。例如:4×128205=512820 4×128205=512820 所以128205是一个4-寄生数。不允许使用带前导零的自然数。所以即使 4×025641=102564 4×025641=102564 号码025641不是4-寄生的 赋值:编写一个取自然数的函数。如果给定的自然数是n-寄生数,则函数必须返回值n。否则,函数必须返回值0 我的代码上一个定义parasticnumber在

通常,可以乘以n的正自然数 将最右边的数字移到数字的前面称为n -寄生数。这里n本身是一个一位数的正自然数。例如:4×128205=512820 4×128205=512820 所以128205是一个4-寄生数。不允许使用带前导零的自然数。所以即使 4×025641=102564 4×025641=102564 号码025641不是4-寄生的

赋值:编写一个取自然数的函数。如果给定的自然数是n-寄生数,则函数必须返回值n。否则,函数必须返回值0

我的代码上一个定义parasticnumber在某些情况下不起作用,例如:parasitic142857 n=5,而我的代码返回0

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)



def rotateRight(number):
    """
    >>> rotateRight(179487)
    717948
    >>> rotateRight(428571)
    142857  
    >>> rotateRight(52631578947368421)
    15263157894736842
    """

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

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


    count = 0
    getal = count * number

    while getal != rotateLeft(number):
        count += 1
        getal = count * number
        if getal == rotateLeft(number):
            break
            return (count)
        else:
            return 0
因为break离开循环,所以永远无法到达return语句;您的代码只会从函数的末尾脱落,并且不返回任何值

此外,对getal==rotateLeftnumber的双重检查表明循环设计不佳;您应该能够在循环的顶部测试一次,而无需在内部进行第二次检查

修理

您必须处理两种情况:

如果找到与旋转匹配的乘数,请返回该乘数。 如果所有有效乘数都失败,则返回0。 那么,在你放弃之前,你会尝试多少乘数呢? b您将两个不同的返回语句放在哪里来处理这些情况?

我已经编写了一个函数,似乎可以为您的示例完成这项工作

它使用字符串片段的串联,并将其与num进行比较。我认为一个技巧是n只能在2和11之间才能起作用,否则最后的移位1将永远不会成为原始数字

代码如下:

def parasitic(num):
    for n in range(2, 11):
        res = n * num
        if str(num)[-1] + str(num)[:-1] == str(res):
            return n
    return False
测试:

>>> parasitic(128205)
4
>>> parasitic(142857)
5
>>> parasitic(105263157894736842)
2
>>> parasitic(35)
False

您的问题已删除中断,这是第一个问题,因为它在返回任何内容之前结束:

if getal==rotateLeft(number):
    return count
else:
    return 0
我认为您打算使用while-else循环,但如果第一个结果不起作用,则返回0。您需要更改缩进,以使else对齐,而如果没有找到结果,则返回0,而不是if。您还必须添加检查内容的限制,或者如果没有结果,它将永远持续下去

while getal != rotateLeft(number):
   count += 1
   getal = count * number
   if getal == rotateLeft(number):
        return (count)
else:
   return 0
虽然使用While循环可以提高您对python的掌握,但这可以通过使用%操作符来解决

def rotateRight(number):
    """
    >>> rotateRight(179487)
    717948
    >>> rotateRight(428571)
    142857  
    >>> rotateRight(52631578947368421)
    15263157894736842
    """
    k = str(number)
    return int(k[-1] + k[:-1])

def parasitic(number):
    rotated = rotateRight(number)
    if not rotated % number:
        return rotated // number
    else:
        return 0

这将测试数字是否可以被右旋转得到的数字整除,如果可以,则返回除数//运算符将结果四舍五入到最接近的整数,但我们已经知道结果必须是整数。如果数字是寄生的,则while循环最终将停止,即使不在其中加中断符。我建议不要在这种电流条件下使用while循环,因为如果数字不是寄生的,这将是无限循环

但是我可以证明,如果您在else条件下删除了return,那么您的代码就可以工作。您还可能需要添加rotateLeft和rotateRight的条件:


希望这能有所帮助。

如果getal==rotateLeftnumber:break return count:那就永远不会返回count,而上一次循环是可疑的:它会在第一次迭代时返回或中断,我会用所有值得到0。你发了正确的代码吗?关于@Lien,但我不认为179487是4寄生的。我认为你的else:return 0在第一次计数后停止循环。因此,它无法达到预期的输出。这是因为在第一次计数时,0 x数字显然不是寄生的,所以它会立即返回0。@Jean-Françoisfar correct;这不是一次性逻辑错误。你的意思是什么?@Lien单击答案旁边0上方的箭头,并单击同一位置的灰绿色箭头:现在接受任何答案都为时过早。对于这个问题,根本不需要循环。看这个。另外,你不应该一遍又一遍地计算strnum[-1]+strnum[:-1]。绝对不需要任何循环。
def rotateRight(number):
    """
    >>> rotateRight(179487)
    717948
    >>> rotateRight(428571)
    142857  
    >>> rotateRight(52631578947368421)
    15263157894736842
    """
    k = str(number)
    return int(k[-1] + k[:-1])

def parasitic(number):
    rotated = rotateRight(number)
    if not rotated % number:
        return rotated // number
    else:
        return 0
def parasitic(number):
    count = 0;
    getal = count * number;

    while getal != rotateLeft(number) and getal != rotateRight(number) :
        count += 1
        getal = int(count * number)
        if getal == rotateLeft(number) or getal == rotateRight(number)  :
            print(count); print(getal);
            return (count)
        else:
            pass