为什么这个Python代码不起作用?

时间:2017-10-02 17:32:54

标签: python while-loop

请帮助,我无法弄清楚为什么这段代码不起作用。我认为第一个循环永远运行,但我不知道为什么!

def NTN():
    list1 = []
    count = 0
    number = 0
    Start = input('Type Start Number')
    while number != Start:
        count = count + 1
        number = number + count
    Stop = input('Type Stop Number')
    while number != Stop:
        count = count + 1
        number = number + count
        if number != Stop:
            (list1).append(number)
    return (list1)

print(NTN())

3 个答案:

答案 0 :(得分:2)

通过增加每次迭代的金额来增加number。以下是它如何增加的想法。假设Start = 4

1次循环后,count = 1且number = 1,增加1

2次循环后,count = 2且number = 3,增加2

3次循环后,count = 3且number = 6,增加3

由于number永远不会等于为4,因此循环永远不会结束。你需要的是while number <= Start。当number超过4时,这将在3次迭代后终止循环。

答案 1 :(得分:1)

更改&#34;数字!=开始&#34;和&#34;数字!=停止&#34;至&#34;数字&lt;开始&#34;和&#34;数字&lt;停止&#34;在所有地方,它应该工作。

出了什么问题:如果Start是2,那么在while循环的第一次迭代中,count变为0 + 1 = 1,number变为0 + 1 = 1;在第二次迭代中,count变为1 + 1 = 2且number变为1 + 2 = 3,绕过2.因为while循环仅在number等于Start时结束,所以它永远不会结束。

答案 2 :(得分:0)

有几个侧面点:

  1. 按照惯例,Python变量和函数名称是小写的。
  2. input()返回一个字符串;如果你想要一个号码,你必须转换它,即int()float()。 (注意:如果您使用的是Python 2.x input()调用eval(),这实际上是非常糟糕的设计 - 您应该使用int(raw_input())代替。)
  3. 所以,

    # This code assumes Python 3.x
    from math import ceil, sqrt
    
    def get_int(prompt):
        """
        Prompt until an integer value is entered
        """
        while True:
            try:
                return int(input(prompt))
            except ValueError:
                print("Please enter an integer!")
    
    def tri(n):
        """
        Return triangular number n,
          ie the sum of (1 + 2 + ... + n)
        """
        # using Gaussian sum
        return n * (n + 1) // 2
    
    def reverse_tri(t):
        """
        For positive integer t,
        return the least positive integer n
          such that t <= tri(n)
        """
        # derived by quadratic formula from
        #   n * (n + 1) // 2 >= t
        return int(ceil(((sqrt(8 * t + 1) - 1) / 2)))
    
    def ntn(start, stop):
        """
        Return a list of triangular numbers
          such that start <= tri < stop
        """
        a = reverse_tri(start)
        b = reverse_tri(stop)
        return [tri(n) for n in range(a, b)]
    
    def main():
        start = get_int('Enter a start number: ')
        stop = get_int('Enter a stop number: ')
        lst = ntn(start, stop + 1)    # include stop number in output
        print(lst)
    
    if __name__ == "__main__":
        main()