首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :寄生数字

Python :寄生数字
EN

Stack Overflow用户
提问于 2017-10-31 01:48:03
回答 5查看 412关注 0票数 0

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

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

我的代码(上一个定义parastic(number))在某些情况下不起作用,例如: parasitic(142857) n=5,而我的代码返回0。

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

发布于 2017-10-31 02:15:34

虽然使用while循环可能会提高您对python的理解,但使用%操作符就可以很简单地解决这个问题。

代码语言:javascript
复制
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

这个测试看number是否可以被右旋转得到的数字整除,如果可以,则返回除数( //运算符将结果四舍五入到最近的整数,但我们已经知道结果必须是整数)

票数 2
EN

Stack Overflow用户

发布于 2017-10-31 02:06:10

我已经编写了一个function,它似乎可以为您的示例做这项工作!

它使用string slicesconcatenation,并将其与num进行比较。我认为一个技巧是n只能在211之间才能工作,否则1在结尾的转换永远不会生成原始的number

代码如下:

代码语言:javascript
复制
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

测试:

代码语言:javascript
复制
>>> parasitic(128205)
4
>>> parasitic(142857)
5
>>> parasitic(105263157894736842)
2
>>> parasitic(35)
False
票数 0
EN

Stack Overflow用户

发布于 2017-10-31 02:09:49

你的问题(删除了break,这是第一个问题,因为它在返回任何东西之前结束了):

代码语言:javascript
复制
if getal==rotateLeft(number):
    return count
else:
    return 0

我认为您打算使用while-else循环,但最终得到的结果是“如果第一个结果不起作用,返回0”。您需要更改缩进,以便else将while排成一行(因此,如果没有找到结果,则返回0),而不是if。您还必须添加要检查的内容的限制,否则如果没有结果,它将永远继续。

代码语言:javascript
复制
while getal != rotateLeft(number):
   count += 1
   getal = count * number
   if getal == rotateLeft(number):
        return (count)
else:
   return 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47021335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档