将以下迭代代码转换为递归Python

2024-05-19 13:09:10 发布

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

6174被称为Kaprekar常数[1][2][3],以印度数学家D.R.Kaprekar命名。这一数字因以下特性而引人注目:

取任意四位数,至少使用两个不同的数字。(允许前导零。) 按降序排列数字,然后按升序排列,得到两个四位数的数字,必要时加前导零。 从大数中减去较小的数字。 返回步骤2。在

达塔拉亚拉姆钱德拉卡普雷卡尔

number="0011" 

print(" helo world,  lets do this: " , number)
i = 0
while number != "6174":
 sortedS = sorted(number)                            
 String[] sortedString = array[4] av strangen number
 reversed = sorted(number, reverse=True)            
 sortedIntMin = int(sortedS[0]+sortedS[1]+sortedS[2]+sortedS[3])
 reversedIntMax = int(reversed[0]+reversed[1]+reversed[2]+reversed[3])  
 i += 1
 number = str(reversedIntMax - sortedIntMin)                                           
 reversedIntMax - sortedIntMin
 print("det behovdes " , i , "iterationer for processen")

这是我失败的尝试

^{pr2}$

Tags: number常数数字命名intsortedprint数学家
2条回答

有三件事是错误的:

  1. 你不需要i。从函数定义中删除它。在
  2. 您传递的变量是一个字符串,并且您要将其与整数进行比较,请在比较时将其转换为字符串。在
  3. 当number='6174'时需要返回1,而不返回。在
  4. 另外,如果在排序后将列表联接起来,并且可以直接将其转换为整数,则可以更清楚地完成此操作(感谢endzior的编辑)

    试试这个:

    def Kaprekar(number):
        if number == '6174':
            return 1
        elif number != '6174':
            sortedString = ''.join(sorted(number))
            reversedString = ''.join(sorted(number, reverse=True))
            sortedIntMin = int(sortedString)
            reversedIntMax = int(reversedString)
            num = reversedIntMax - sortedIntMin
            print("processen kors", num )
            return  1 + Kaprekar(str(num))
    
    print(" helo world,  lets do this: ")
    print("det behovdes " , Kaprekar("1547") , "iterationer for processen")
    

number是一个字符串,因此在前2个if语句中:

if number == '6174':
    return 1
else:

在另一个答案中,这里不需要i变量。在

相关问题 更多 >