如何在重复算法

时间:2016-02-14 16:35:54

标签: python-3.x while-loop

这就是我想要完成的事情:

  1. 让用户输入一个四位数的数字
  2. 如果此数字不等于6174(Kaprekar常数),则以两种方式对数字进行排序: 一个。从最大到最小的数字 湾从最小到最大
  3. 使用较小的
  4. 减去较大的数字
  5. 如果结果不等于6174,则再次进行计算并为每次计算编写结果
  6. 当结果等于6174时,写一条消息以显示计算已完成
  7. 这是我尝试过的:

    print("type in a number")
    number = (input())
    while number != 6174:
        start_big = "".join(sorted(number, reverse=True))
        start_small = "".join(sorted(number))
        number = (int(start_big)-int(start_small))
        print(number)
    print("Calculation finnished!")
    

    我收到了错误:

    start_big = "".join(sorted(number, reverse=True)) TypeError: 'int'
    object is not iterable
    

4 个答案:

答案 0 :(得分:1)

计算时:

number = (int(start_big)-int(start_small))

number的类型变为int,因此在下一次迭代中会发生错误。

一种解决方案是

print("type in a number")
number = input()
while number != "6174":
    start_big = "".join(sorted(number, reverse=True))
    start_small = "".join(sorted(number))
    number = str((int(start_big) - int(start_small)))
    print(number)
print("Calculation finnished!")

答案 1 :(得分:0)

你快到了。您需要将this.panel1.AutoScroll = true; this.panel1.AutoScrollMinSize = = new System.Drawing.Size(500, 300); private void OnPaint(object sender, PaintEventArgs e) { Rectangle ellipse = new Rectangle(Point.Empty, new Size(400, 400)); ellipse.Offset(this.panel1.AutoScrollPosition); using (Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red)) { e.Graphics.DrawEllipse(myPen, ellipse); } } private void OnPanelScroll(object sender, ScrollEventArgs e) { this.panel1.Invalidate(); } 转换为可迭代的。我建议:

number

答案 2 :(得分:0)

你必须将输入数字转换为可迭代的,你可以这样做

number = iter(number)

您还需要更改while循环条件:

while int(number) != 6174:

打印号码只需这样做:

number = str((int(start_big)-int(start_small)))

答案 3 :(得分:0)

您的解决方案存在多个问题:

  1. input()总是返回一个字符串,因此number永远不会是一个整数,因此永远不会等于6174。所以你的循环仍然会输入6174

    首先需要将字符串转换为数字,只需在字符串上调用int()即可。请注意,这可能会失败,因此您可能需要ask the user for input until they enter a valid number

  2. 一旦number为整数,它就不再是可迭代的,因此您无法在其上调用sorted()。如果要对数字进行排序,则需要先将其转换为字符串:sorted(str(number))