通常,通过将最右边的数字移到数的前面可以乘以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。
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发布于 2017-10-31 02:15:34
虽然使用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这个测试看number是否可以被右旋转得到的数字整除,如果可以,则返回除数( //运算符将结果四舍五入到最近的整数,但我们已经知道结果必须是整数)
发布于 2017-10-31 02:06:10
我已经编写了一个function,它似乎可以为您的示例做这项工作!
它使用string slices的concatenation,并将其与num进行比较。我认为一个技巧是n只能在2和11之间才能工作,否则1在结尾的转换永远不会生成原始的number。
代码如下:
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发布于 2017-10-31 02:09:49
你的问题(删除了break,这是第一个问题,因为它在返回任何东西之前结束了):
if getal==rotateLeft(number):
return count
else:
return 0我认为您打算使用while-else循环,但最终得到的结果是“如果第一个结果不起作用,返回0”。您需要更改缩进,以便else将while排成一行(因此,如果没有找到结果,则返回0),而不是if。您还必须添加要检查的内容的限制,否则如果没有结果,它将永远继续。
while getal != rotateLeft(number):
count += 1
getal = count * number
if getal == rotateLeft(number):
return (count)
else:
return 0https://stackoverflow.com/questions/47021335
复制相似问题