卡普雷卡数

2024-05-19 13:08:37 发布

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

def kaprekar_num(num):
    count = 0
    while count <= num:
        n = 1
        sqr = n ** 2
        digits = str(sqr)
        length = len(digits)
        for x in range(1, length):
            left = int("".join(digits[:x]))
            right = int("".join(digits[x:]))
            if (left + right) == n:
                print("Number: " + str(n) + ", Left: " + str(left) + " + " + " Right: " + str(right) + " = " + str(n))
                n += 1
                count += 1
            else:
                n += 1
kaprekar_num(5)

大家好, 我是python编程新手,课堂上有一项任务,就是打印前5个kaprekar数。 (我只有C编程背景…) 我对“范围内的x…”行有问题。。代码没有进入循环,我不知道为什么。 该程序需要打印:

Number: 9, Left: 8 +  Right: 1 = 9
Number: 10, Left: 10 +  Right: 0 = 10
Number: 45, Left: 20 +  Right: 25 = 45
Number: 55, Left: 30 +  Right: 25 = 55
Number: 99, Left: 98 +  Right: 1 = 99

我将感谢一些见解:)


Tags: rightnumber编程countleftlengthnumint
3条回答

您如何管理n值是不正确的。它应该在循环开始之前设置,然后在每次尝试之后,不管结果如何,它都应该递增

def kaprekar_num(num):
    count = 0
    # Start n at one, and don't reset it on each loop
    n = 1
    while count <= num:
        sqr = n ** 2
        digits = str(sqr)
        length = len(digits)
        for x in range(1, length):
            left = int("".join(digits[:x]))
            right = int("".join(digits[x:]))
            if (left + right) == n:
                print("Number: " + str(n) + ", Left: " + str(left) + " + " + " Right: " + str(right) + " = " + str(n))
                count += 1
                # This number is a Kaprekar number, so break out of the loop
                break
        # Regardless of the status of this number, try the next one
        n += 1
kaprekar_num(5)

作为一项建议:我强烈建议您将来使用调试器逐步完成代码。如果你这么做了,你会发现n的变化并不是很快

for循环很好,有一些逻辑问题,您还没有处理,比如当n==1和len(sqr)==1时

def kaprekar_num(num):
    count = 0
    n=1
    while count <= num:
         

        sqr = n ** 2
        digits = str(sqr)
        length = len(digits)
        if sqr==1:
            print("Number: " + str(n)  + " = " + str(n))
            count+=1
            n+=1
        elif length>1:
            for x in range(1,length):
                left = int("".join(digits[:x]))
                right = int("".join(digits[x:]))
                if (left + right) == n:
                    print("Number: " + str(n) + ", Left: " + str(left) + " + " + " Right: " + str(right) + " = " + str(n))
                    n += 1
                    count += 1
                else:
                    n += 1
        else:
            n+=1
            
kaprekar_num(5)

你把循环设置为重复一次,我想,如果你想把n代替1,我想这就是问题所在

尝试将循环设置为该值

for x in range(n, length):

相关问题 更多 >