代码之家  ›  专栏  ›  技术社区  ›  pie

如何减小python中for循环的范围?

  •  -5
  • pie  · 技术社区  · 1 年前

    In this 问题我想找到min(m+k)使得mCk=n,我为我的序列编写了一段暴力破解的代码,问题是我的代码不够快,所以我想减少for循环的长度 k 进步

    import math
    print("the input is the maximum number $n$ to check for i.e for all u between 1, n the code gives the min m+k suck that mCk =n , the output is in the for of $(n , min (m+k : mCk=n)) $")
    u=int(input())
    for n in range (2,u+1):
        C=[]
        stop=1
        l=0
        for m in range (1, n+1):
            s=0
            if stop==-1:
                break
            for k in range(1, math.floor(m/2)+1-l):
                if math.comb(m,k)>n:
                    l=l+1
                    break
                if math.comb(m,k)==n:
                    C.insert(s,m+k )
                    s=s+1
                    if min(C)<n+1:
                        stop=-1
                        break                      
        print(f"({n},{min(C)}), ")                               
    

    这些是代码给出的第一个初始值: ( 2, 3), ( 3, 4), ( 4, 5), ( 5, 6), ( 6, 6) , ( 7, 8), ( 8, 9), ( 9, 10), ( 10, 7) , ( 11, 12), ( 12, 13), ( 13, 14), ( 14, 15), ( 15, 8) , ( 16, 17), ( 17, 18), ( 18, 19), ( 19, 20), ( 20, 9) , ( 21, 9) , ( 22, 23), ( 23, 24), ( 24, 25), ( 25, 26), ( 26, 27), ( 27, 28), ( 28, 10) , ( 29, 30), ( 30, 31), ( 31, 32), ( 32, 33), ( 33, 34), ( 34, 35), ( 35, 10)

    问题是写这样的东西:

    k=0
    for i in range (0,100-k+1):
        if i%2==0
            k=k+1
    

    不会减少范围的长度,这是我需要用代码做的

    我试图寻找这个问题的解决方案,但只发现了无关的堆栈溢出问题。

    2 回复  |  直到 1 年前
        1
  •  1
  •   Booboo    1 年前

    您有:

    k=0
    for i in range (0,100-k+1):
        if i%2==0
            k=k+1
    

    最终,你无法使用 range 功能。自从 k 最初为0,您的 范围 功能本可以简化为 range(0, 101) .在你的环路的身体你有 k=k+1 。看来您的意图是将范围的结束值减少1。所以我们有:

    i = 0
    max_i = 101
    while i < max_i:
        print(i)  # For demo purposes
        if i % 2 == 0:
            max_i -= 1  # Reduce max_i
        i += 1  # Increment i for next iteration
    

    这将打印出0、1、2。。。66

        2
  •  1
  •   Bindestrich    1 年前

    @Sieha的评论是正确的。循环长度不能更改。

    A. while 循环似乎更合适。

    另一种选择是使用 continue 关键字而不是 break .

    持续 将忽略该迭代循环的其余部分。

    for i in range(5):
        print(f"iteration {i}")
        if i>1:
          continue
        print("skipped when i>i")
    

    将输出

    iteration 0
    skipped when i>2
    iteration 1
    skipped when i>2
    iteration 2
    iteration 3
    

    迭代4