如何在python中迭代条件检查?
以下函数为我提供了正确的结果。但是对于大量的q,处理这个程序非常困难。所以,我想通过循环或其他方式来迭代q。我该怎么做如何在python中迭代条件检查?,python,python-2.7,loops,iteration,Python,Python 2.7,Loops,Iteration,以下函数为我提供了正确的结果。但是对于大量的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*
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
其中a0、a1在[01060]中,a2从[01068]中随机选择
如果所有的fx你的q应该是一个列表。这样,您就可以使用具有范围的for循环来执行计算:
for ind in range(len(q)):
q[ind]=(a[0]+a[1]*(ind + 1)+a2*(ind + 1)**2)%p
您也可以将您的条件表示为迭代,但最简单的方法可能是使用any函数并将您的条件编写为生成器:
while any(qx > 1060 for qx in q):
你的q应该是一个列表。这样,您就可以使用具有范围的for循环来执行计算:
for ind in range(len(q)):
q[ind]=(a[0]+a[1]*(ind + 1)+a2*(ind + 1)**2)%p
您也可以将您的条件表示为迭代,但最简单的方法可能是使用any函数并将您的条件编写为生成器:
while any(qx > 1060 for qx in q):
看起来在生成qs时,唯一的变量是将a[1]和a2乘以的整数 您可以修改函数以接受q的总数作为第二个参数,例如total_q,然后迭代range1、total_q+1,并将每个新q附加到Python列表中,最后返回列表 尝试以下方法:
def sgf(a, total_q):
import random
a2=random.randint(1,1068)
p=1069
q_list = []
for i in range(0,total_q+1):
q = (a[0]+a[1]*i+a2*i**2)%p
q_list.append(q)
while any(q > 1060 for q in q_list):
a2=random.randint(1,1068)
q_list = []
for i in range(0,total_q+1):
q =(a[0]+a[1]*i+a2*i**2)%p
q_list.append(q)
if all(q <= 1060 for q in q_list):
break
return q_list
看起来在生成qs时,唯一的变量是将a[1]和a2乘以的整数 您可以修改函数以接受q的总数作为第二个参数,例如total_q,然后迭代range1、total_q+1,并将每个新q附加到Python列表中,最后返回列表 尝试以下方法:
def sgf(a, total_q):
import random
a2=random.randint(1,1068)
p=1069
q_list = []
for i in range(0,total_q+1):
q = (a[0]+a[1]*i+a2*i**2)%p
q_list.append(q)
while any(q > 1060 for q in q_list):
a2=random.randint(1,1068)
q_list = []
for i in range(0,total_q+1):
q =(a[0]+a[1]*i+a2*i**2)%p
q_list.append(q)
if all(q <= 1060 for q in q_list):
break
return q_list
你应该学习如何使用列表和循环。。。事实上,对于这个特殊的问题,您应该使用NumPy。尝试一些类似于anya[0]+a[1]*1+a2*i**2%p>1060 for i In range1,10的方法,您应该学习如何使用列表和循环。。。事实上,对于这个特殊的问题,您应该使用NumPy