循环随机取数组,直到指定数字出现

出题:

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)

代码运行无故障

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值