首页 > 解决方案 > 卡普雷卡数字

问题描述

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 编程背景...)“for x in range...”行有问题.. 代码没有进入循环,我不知道为什么。程序需要打印:

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

我会欣赏一些见解:)

标签: python

解决方案


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)

推荐阅读