结束for循环,Python

结束for循环,Python,python,for-loop,Python,For Loop,我正在编写一个程序,从用户那里读取一个整数“n”,然后将数字1^2-2^2+3^2-4^2+…±n^2相加。例如,如果n=7,则程序将返回28。我是这样做的: n = int(input("n = ")) summ = 0 for number in range (1,n +1): square = (number**2)*((-1)**(number+1)) summ += square print(square) print("The loop ran",numb

我正在编写一个程序,从用户那里读取一个整数“n”,然后将数字
1^2-2^2+3^2-4^2+…±n^2
相加。例如,如果n=7,则程序将返回28。我是这样做的:

n = int(input("n = "))
summ = 0

for number in range (1,n +1):
    square = (number**2)*((-1)**(number+1))
    summ += square
    print(square)

print("The loop ran",number,"times, the sum is", summ)
问题是我希望程序在总和达到用户输入的“k”之前结束

n = int(input("n = "))
k = int(input("k = "))

summ = 0

for number in range (1,n +1):
    square = (number**2)*((-1)**(number+1))
    summ += square
    print(square)
    if summ > k:
        break


print("The loop ran",number,"times, the sum is", summ)

如果k=6,程序返回“循环运行了5次,总和为15”,但15明显大于6。正确的答案是“循环运行了4次,总和是-10”。有人知道如何解决这个问题吗?我还尝试将if语句放在“for number”行下面,但返回“循环运行了6次,总和是15”。

您正在更新
summ
值,然后检查条件。你应该先检查总数,然后再把数字加到总和上

for number in range(1, n+1):
    square = (number**2)*((-1)**(number+1))
    if summ + square > k:
        break
    summ += square
    ...

# this should work, assuming the rest of your code works.

在将平方和相加之前,只需设置一个条件

if summ + square > 7: break
测试
summ+square
相反,在添加到
summ
之前,您可以在更新
summ
之前检查一个单独的变量。您可以在打印时减去值(如果这就是您所做的)
打印(“循环运行”,数字1,“次数,总和是”,summ square)
n = int(input("n = "))
summ = 0

for number in range (1,n +1):
    square = (number**2)*((-1)**(number+1))
    if summ + square > 7:
        break
    summ += square

    print(square)

print("The loop ran",number,"times, the sum is", summ)