Python 如何仅打印此输出的最后一行?

Python 如何仅打印此输出的最后一行?,python,primes,final,highest,Python,Primes,Final,Highest,我需要找到10000以下最长的非素数行 如何只打印输出中的最后一行? 没有最大值函数,没有简单的数值约束 我认为它只需要一些小的调整,只是不知道在哪里或如何 priemen = [] for x in range(2,10000): #prime generator tel = 0 for deler in range(1,x): if x % deler == 0: tel += x % deler == 0 if tel

我需要找到10000以下最长的非素数行

如何只打印输出中的最后一行? 没有最大值函数,没有简单的数值约束

我认为它只需要一些小的调整,只是不知道在哪里或如何

priemen = []
for x in range(2,10000):    #prime generator
    tel = 0
    for deler in range(1,x):
        if x % deler == 0:
            tel += x % deler == 0
    if tel <2:
        priemen.append(x)   

a = priemen[0]
b = priemen[1]
maxrow = 0

for next in priemen[2:]:    
    a = b
    b = next
    row = b - a - 1       
    
    if row > maxrow:
        maxrow = row
        print("The longest row starts at", a+1, "and stops at", b-1, "and is", maxrow, "long.")

------------------
Output: 
The longest row starts at 8 and stops at 10 and is 3 long.
The longest row starts at 24 and stops at 28 and is 5 long.
The longest row starts at 90 and stops at 96 and is 7 long.
The longest row starts at 114 and stops at 126 and is 13 long.
The longest row starts at 524 and stops at 540 and is 17 long.
The longest row starts at 888 and stops at 906 and is 19 long.
The longest row starts at 1130 and stops at 1150 and is 21 long.
The longest row starts at 1328 and stops at 1360 and is 33 long.
The longest row starts at 9552 and stops at 9586 and is 35 long.

priemen=[]
对于范围内的x(210000):#主发电机
电话=0
对于范围(1,x)内的删除器:
如果x%deler==0:
电话+=x%deler==0
如致电maxrow:
maxrow=行
打印(“最长的行从“、a+1”开始,在“、b-1”结束,是“、maxrow”、“long”。)
------------------
输出:
最长的一行从8开始,10结束,长度为3。
最长的一行从24开始,在28停止,长度为5。
最长的一行从90开始,在96停止,长度为7。
最长的行从114开始,在126处停止,长度为13。
最长的行从524开始,在540停止,长度为17。
最长的一行从888开始,在906停止,长度为19。
最长的行从1130开始,在1150停止,长度为21。
最长的行从1328开始,在1360停止,长度为33。
最长的行从9552开始,在9586停止,长度为35。
我只需要打印最后一张


谢谢

您需要将
a
b
的值保存到单独的变量中,以便在循环后打印它们

b = priemen[1]
maxrow = 0

for n in priemen[2:]:
    a = b
    b = n
    row = b - a - 1       
    
    if row > maxrow:
        maxrow = row
        a_max = a
        b_max = b

if maxrow != 0:
    print("The longest row starts at", a_max + 1, "and stops at", b_max - 1, "and is", maxrow, "long.")
其他需要注意的事项:

  • 我没有初始化
    a_max
    b_max
    ——但是最后的
    if
    测试是为了防止任何尚未设置它们的情况
  • 我将
    next
    重命名为
    n
    ,因为
    next
    是一个内置的名称
  • a=priemen[0]
    行毫无意义,因此我已将其删除

我发现这段代码效率低下,存在问题。首先,它的效率很低,因为它测试从1到x的除数

for deler in range(1, x):
当它只需要测试奇数因子(处理偶数后)从3到
x
的平方根。但是,即使这样做也是低效的,因为它正在创建一个素数列表,它可以用它作为除数来加快速度!最后,就效率而言,我相信这可以一次完成:

TARGET = 10_000  # below this number

primes = [2]

start = end = primes[-1]

for number in range(3, TARGET, 2):

    def is_prime(number):
        for divisor in primes:
            if divisor * divisor > number:
                return True

            if number % divisor == 0:
                return False

        return True

    if is_prime(number):
        primes.append(number)

        if primes[-1] - primes[-2] > end - start:
            start, end = primes[-2:]

print("The longest run starts at", start + 1, "and stops at", end - 1, "and is", end - start - 1, "long.\n")
最后,就目标而言,问题没有明确规定,解决方案可能是错误的。考虑9586的目标,而不是10000。编写的代码将打印:

The longest run starts at 1328 and stops at 1360 and is 33 long.
但通过在主循环之后添加以下代码:

if TARGET - primes[-1] > end - start:
    start, end = primes[-1], TARGET
我们得到了正确的答案:

The longest run starts at 9552 and stops at 9585 and is 34 long.

如果目标值更大,则运行时间会更长,但这仍然是最长的运行时间。

取消打印
行的两个步骤。但这不仅仅是因为要打印的
a
b
的值不是最后一次迭代中的值。请注意:您找到了长度为
maxrow
的第一行。可能不止一个。谢谢你,先生,对于这项任务,我不允许使用任何中断语句,不确定你是否能解决这个问题,我对编程还是很陌生,我意识到它对你来说可能更有效sure@CasperA,我修改了代码,不使用
break
语句。