请帮助,我无法弄清楚为什么这段代码不起作用。我认为第一个循环永远运行,但我不知道为什么!
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())
答案 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)
有几个侧面点:
input()
返回一个字符串;如果你想要一个号码,你必须转换它,即int()
或float()
。 (注意:如果您使用的是Python 2.x input()
调用eval()
,这实际上是非常糟糕的设计 - 您应该使用int(raw_input())
代替。)所以,
# 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()