【问题标题】:while loop won't works right in pythonwhile 循环在 python 中不能正常工作
【发布时间】:2022-01-16 05:07:12
【问题描述】:

我编写了这段代码来总结一个大于 10 的数字的数字,直到结果只有一个数字,当我尝试编译它时,它甚至不会给我一个错误,直到我停止它。我想知道是什么问题。

number = input()
#sumed_up_digits = result
result = 0

while len(number) != 1:
    for i in number:
        int_i = int(i)
        result = result + int_i

     number = str(result)

print(result)

【问题讨论】:

  • 尝试使用调试器来捕获错误。 IMO,结果是一个增加的值,而不是一个减少的值。因此,如果它的初始值长于 1 个字符,它将永远不会停止。
  • 尝试将 result = 0 放在 while 和 for 之间,而不是在 while 将 sum = 0 之前放入 result,在 for 之后将结果添加到 sum,然后在末尾打印 sum。你写的结果是累积的,它将包括所有以前的总和,这些总和会继续增加。
  • 问题是当我们输入一个大于10的数字时,我们不会得到一个数字!
  • 所以while循环变成了无限循环:)

标签: python string while-loop digits


【解决方案1】:

试试下面的代码:

   s=input()
   n=len(s)
   result=0
   for i in range(n-1):
      result=result+int(s[i])
   print(result)

这个 for 循环从给定字符串的第 0 到第 (n-2) 个索引运行,因此最后一个数字不会添加到结果中。与 1245 一样,它会将 1,2 和 4 添加到结果中,但不是 5。

【讨论】:

    【解决方案2】:

    结果是累积的,包括以前的总和。 试试:

    number = input()
    #sumed_up_digits = sum
    sum = 0
    
    while len(number) != 1:
        result = 0
        for i in number:
            int_i = int(i)
            result = result + int_i
        sum = sum + result
        number = str(result)
    
    print(sum)
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      number = input()
      
      if len(number) <= 1:
          print(0)
      
      while len(number) > 1:
          number = str(sum(int(i) for i in number))
      
      print(int(number))
      

      当然,您需要检查初始输入 number 是否由数字组成...

      【讨论】:

        【解决方案4】:

        问题是数字没有被缩短,因此永远不会达到循环停止的条件。

        number = input()
        
        result = 0
        while len(number) != 1:
            # set digit to last number
            digit = int(number) % 10
            result += digit
            number = number[:-1]
        
        print(result)
        

        【讨论】:

          猜你喜欢
          • 2015-05-14
          • 1970-01-01
          • 1970-01-01
          • 2012-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-23
          相关资源
          最近更新 更多