如何在python中迭代条件检查?

以下函数为我提供了正确的结果。但是对于大量的q来说,这个程序就很难处理了。所以,我想通过循环或其他方式迭代 q。我怎样才能做到这一点?


def sgf(a): # here a is a list of two numbers

    import random

    a2=random.randint(1,1068)

    p=1069

    q1=(a[0]+a[1]*1+a2*1**2)%p

    q2=(a[0]+a[1]*2+a2*2**2)%p

    q3=(a[0]+a[1]*3+a2*3**2)%p

    q4=(a[0]+a[1]*4+a2*4**2)%p

    q5=(a[0]+a[1]*5+a2*5**2)%p

    q6=(a[0]+a[1]*6+a2*6**2)%p

    q7=(a[0]+a[1]*7+a2*7**2)%p

    q8=(a[0]+a[1]*8+a2*8**2)%p

    q9=(a[0]+a[1]*9+a2*9**2)%p

    while ((q1>1060) or (q2>1060) or (q3>1060) or (q4>1060) or (q5>1060) or (q6>1060) or (q7>1060) or (q8>1060) or (q9>1060)):

        a2=random.randint(1,1068)

        q1=(a[0]+a[1]*1+a2*1**2)%p

        q2=(a[0]+a[1]*2+a2*2**2)%p

        q3=(a[0]+a[1]*3+a2*3**2)%p

        q4=(a[0]+a[1]*4+a2*4**2)%p

        q5=(a[0]+a[1]*5+a2*5**2)%p

        q6=(a[0]+a[1]*6+a2*6**2)%p

        q7=(a[0]+a[1]*7+a2*7**2)%p

        q8=(a[0]+a[1]*8+a2*8**2)%p

        q9=(a[0]+a[1]*9+a2*9**2)%p

        if ((q1<=1060) and (q2<=1060) and (q3<=1060) and (q4<=1060) and (q5<=1060) and (q6<=1060) and (q7<=1060) and (q8<=1060) and (q9<=1060)):

            break  

    return q1,q2,q3,q4,q5,q6,q7,q8,q9

为简单起见,


f(x)=(a0+a1*x+a2*x**2)%p

其中 a0,a1 在 [0,1060] 中,a2 从 [0,1068] 中随机选择,如果全部为f(x)<=1060,则接受 f(x) 否则重新生成 f(x)


开心每一天1111
浏览 166回答 3
3回答

萧十郎

您q可能应该是一个列表。这样你就可以使用for循环range来执行你的计算:for ind in range(len(q)):&nbsp; &nbsp; q[ind]=(a[0]+a[1]*(ind + 1)+a2*(ind + 1)**2)%p您也可以将您的条件表示为迭代,但最简单的方法可能是使用该any函数并将您的条件编写为生成器:while any(qx > 1060 for qx in q):

叮当猫咪

def sgf(a):&nbsp; &nbsp; import random&nbsp; &nbsp; a2=random.randint(1,1068)&nbsp; &nbsp; p=1069&nbsp; &nbsp; items = []&nbsp; &nbsp; # if items is empty, or any element is greater than 1060, keep looping&nbsp; &nbsp; while not items or any(item > 1060 for item in items):&nbsp; &nbsp; &nbsp; &nbsp; items = [(a[0]+a[1]*i+a2*i**2)%p for i in range(1,10)]&nbsp; &nbsp; return items
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python