出题:
1、随机数字范围:0~100
2、每组数字量:6(s1,s2,s3,s4,s5,s6)
3、第二轮开始随机数字范围:新s1和新s2取值为旧s1和s2之间,新s3和新s4取值为旧s3和s4之间,新s5和新s6取值为旧s5和s6之间。
4、跳出循环条件:任意数字 = 37 如因s1 = s2 != 37&&s3=s4!=37&&s5=s6!=37 使数组进入无意义无限循环,则重新取0~100六个数字并开始如上述第二轮随机的随机取值。
解题思路:
1、一步生成一个随机列表rst_list=[random.randint(0,100) for i in range(6)]
2、搞一个while循环,新建空列表temp=[],使用最值函数max([])和随机取整数函数random.randint(x,y),填充列表
3、如果指定数字出现,就跳出循环
上完整代码:
import random #随机模块是关键
def random_test():
rst_list = [random.randint(0,100) for i in range(0, 6)] #python的快捷之处,一步生成列表
print(rst_list)
while 1: #循环
temp = [] #数组,每次循环都清零
for k,v in enumerate(rst_list): #enumerate是range的升级版
if k%2==0: #双数0,2,4,
temp.append(random.randint(min([rst_list[k],rst_list[k+1]]),max([rst_list[k],rst_list[k+1]])))
else: #单数1,3,5
temp.append(random.randint(min(rst_list[k-1], rst_list[k]),max(rst_list[k-1], rst_list[k])))
rst_list = temp
print(rst_list)
if 37 in rst_list:
print('rst_list:',rst_list)
return rst_list #函数有返回值的好一点
else:
if rst_list[0]==rst_list[1] and rst_list[2]==rst_list[3] and rst_list[4]==rst_list[5]:
rst_list = [random.randint(0, 100) for i in range(0, 6)] #迭代,循环,靠这一步
#def main():
random_test()
#if __name__ == '__main__':
main()
random_test()
'''
代码解析:
---个人感觉第20-23行没必要,简简单单一个第25行就行,有不同想法的可以留言交流
---缩进很重要,第21行和23行,因为缩进原因不起这作用,直接跳过运行第25行
---没有第4、13两行,不影响出结果
函数说明:
---random.randint(x,y)随机取x和y之间的整数,包括x也包括y。likethis:
randonm.randint(1,5)随机取数范围就是1,2,3,4,5五个数
---最值函数max(x),x可以是列表【】,也可以是n个数字。for example:
max([1,3,50,40,14])和max(1,3,50,40,14)运行结果一样
'''
上简版代码:
from random import randint as r
r_list=[r(0,100) for i in range(6)]
while 1:
temp=[]
for k,v in enumerate(r_list):
if k%2==0:
temp.append(r(min(r_list[k],r_list[k+1]),max(r_list[k],r_list[k+1])))
temp.append(r(min(r_list[k],r_list[k+1]),max(r_list[k],r_list[k+1])))
r_list=temp
if 37 in r_list:
break
elif r_list[0]==r_list[1] and r_list[2]==r_list[3] and r_list[4]==r_list[5] :
r_list=[r(0,100) for i in range(6)]
print(r_list)
代码运行无故障