资源描述
Python生成不重复随机值的方法
v假如你排列的是个数组{1,2,3,4,5}
列数假如也是5 也就是5*5的矩阵
然后让5个数组都随机生成 然后排序
如果两个临近数据相同或相近 这两个数据就是挨着的好像这样:
0:{1,2,3,4,5}
1:{2,3,4,5,1}
2:{2,3,5,1,4}
3:{2,3,5,1,4}
4:{2,3,5,4,1}
那么生成完之后就可以经过一次遍历 把邻近两个进行比较
如果相同就重新生成一个 或者先标记 之后再去
必需要用到random模块
import random
n = random.randint(1,10)
会生成一个1到10的随机整数。
插入列表即可
[].append(n)
就好了。你可以做个循环。比如for循环,不断插就好了。
python 3
import itertools
list(itertools.product(range(1, 6), range(1, 4)))
如果必需要随机的话,直接随机产生以上list里的index
import random
n = 5
random_list = list(itertools.product(range(1, 6), range(1, 4)))
random.sample(random_list, n)
package image; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.util.arrays; class chen12180877 { private static final int number = 7; private static final int all = 35; public static void main ( string[] arg ) { int[] saved = new int[number];// 存放猜中的数字 int[] truenum = new int[number];// 存储随机数 int[] guessnum = new int[number];// 猜的数字 int rightnum = 0; boolean again = false; // new 对象都是放在循环外面的,到里面循环,效率是极低的,也是没有必要的 inputstreamreader isr = new inputstreamreader (system.in); bufferedreader br = new bufferedreader (isr); try { do { // 产生7个随机数 system.out.print 〔"产生的随机数:"〕;// 测试用 for ( int i = 0; i { int random = (int) ( math.random () * all ); boolean flag = true; for ( int j = 0; j { if (truenum[j] == random) { system.out.println ("same。
");// 测试用 flag = false; break; } } if (flag) { truenum[i] = random; } else { i--; } } system.out.print (arrays.tostring (truenum)〕;// 测试用 system.out.println ("\n请输入" + number + "个0-" + all + "之间的数字:"); // 获取键盘输入的7个数字 for ( int i = 0; i { string str = br.readline (); guessnum[i] = integer.parseint (str); } int count = 0; // 比较两个数组的数字是否相等 for ( int i = 0; i { for ( int j = 0; j { if (guessnum[j] == truenum[i]) { saved[count++] = truenum[i]; // 猜中一次,就把原来 〔"恭喜您猜中了" + rightnum + "个\n分别是:" + result〕; switch (rightnum) { case 1: case 2: case 3: system.out.println 〔"未中奖"〕; break; case 4: system.out.println 〔"中三等奖"〕; break; case 5: system.out.println 〔"中二等奖"〕; break; case 6: system.out.println 〔"中一等奖"〕; break; case 7: system.out.println 〔"中特等奖!"〕; break; } // 重置 rightnum = 0; } else { system.out.println 〔"你没有猜中"〕; } // 推断用户是否要在玩一次 system.out.println 〔"是否再玩一次?是〔y〕,否〔任意〕"〕; string line = br.readline (); if ("y".equalsignorecase (line)) { again = true; } else { again = false; } } while (again); } catch (exception e) {} finally { try { if (null != br) { br.close (); } if (null != isr) { isr.close (); } } catch (ioexception e) {} } }// main }// class。
4.python菜鸟一直,谁帮我看看这个产生五个不重复随机数的写法哪儿
你的代码
#!D:\Python34\New Folder\python
# -*- coding: UTF-8 -*-
import random
a=[0,0,0,0,0,0]
z=[0,1,2,3,4,5]
y=0
g=i=0
for i in z:
g=random.randint(1,11)
k=0
for k in z:
if a[k] == g:
g=random.randint(1,11)
k=-1;
else:
y=g;
k=k+1;
a[i]=y;
i+=1;
print (a); 感觉12行开始的推断有问题,如果a[k]==g,k=-1,这时就退出循环,也就保留重复的数字了。
Python语言不必需要这么复杂。
# -*- coding: UTF-8 -*-
import random
a=[0,0,0,0,0]
for i in range(5):
g=random.randint(1,11)
while g in a:
g=random.randint(1,11)
a[i] = g
print (a) 或者再简单一点
import random
print(random.sample(range(1, 11), 5))
5.python 随机抽取不重复的数字
def ra(ktop=1,kend=2000,kbu=2,fansize=500):
"""ktop开始,kend结束,kbu步长,fansize返回个数"""
import random
a=[]
while len(a)fansize:
b=random.randrange(ktop,kend,kbu)
if b not in a:
a.append(b)
return a
print ra()
#输出类似[1,31,3,81,5……]等。
1 从给定参数的正态分布中生成随机数 当合计从正态分布中生成随机数时,应当首先知道正态分布的均值和方差〔标准差〕,有了这些,就可以调用python中现有的模块和函数来生成随机数了。
在这里介绍的问题和上面的例子相似,要求给定一个概率列表,从列表对应的数字列表或区间列表中生成随机数,分两部分讨论。3.1 按照指定概率从数字列表中随机抽取数字 假设给定一个数字列表和一个与之对应的概率列表,两个列表对应位置的元素组成的元组即表示该数字在数字列表中以多大的概率出现,那么如何依据这些已知条件从数字列表中按概率抽取随机数呢?在这里我们合计用均匀分布来模拟概率,代码如下:import numpy as npimport random# 定义从均匀分布中获取随机数的函数def get_uniform_random_number(low, high): """ :param low: 均匀分布的下界 :param high: 均匀分布的上界 :return: 从均匀分布中产生的随机数 """ # 均匀分布的随机数生成 number = np.random.uniform(low, high) # 返回值 return number# 定义从一个数字列表中以一定的概率取出对应区间中数字的函数def get_number_by_pro(number_list, pro_list): """ :param number_list:数字列表 :param pro_list:数字对应的概率列表 :return:按概率从数字列表中抽取的数字 """ # 用均匀分布中的样本值来模拟概率 x = random.uniform(0, 1) # 累积概率 cum_pro = 0.0 # 将可迭代对象打包成元组列表 for number, number_pro in zip(number_list, pro_list): cum_pro += number_pro if x < cum_pro: # 返回值 return number# 主模块if __name__ == "__main__": # 数字列表 num_list = [1, 2, 3, 4, 5] # 对应的概率列表 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1] # 函数调用 n = get_number_by_pro(number_list=num_list, pro_list=pr_list) # 打印结果 print(n) # 结果:13.2 按照指定概率从区间列表中的某个区间内生成随机数 给定一个区间列表和一个与之对应的概率列表,两个列表相应位置的元素组成的元组即表示某数字出现在某区间内的概率是多少,已知这些,我们如何生成随机数呢?这里我们通过两次使用均匀分布达到目的,代码如下:import numpy as npimport random# 定义从均匀分布中获取随机数的函数def get_uniform_random_number(low, high): """ :param low: 均匀分布的下界 :param high: 均匀分布的上界 :return: 从均匀分布中产生的随机数 """ # 均匀分布的随机数生成 number = np.random.uniform(low, high) # 返回值 return number# 定义从一个数字列表中以一定的概率取出对应区间中数字的函数def get_number_by_pro(number_list, pro_list): """ :param number_list:数字列表 :param pro_list:数字对应的概率列表 :return:按概率从数字列表中抽取的数字 """ # 用均匀分布中的样本值来模拟概率 x = random.uniform(0, 1) # 累积概率 cum_pro = 0.0 # 将可迭代对象打包成元组列表 for number, number_pro in zip(number_list, pro_list): cum_pro += number_pro if x < cum_pro: # 从区间[number. number - 1]上随机抽取一个值 num = get_uniform_random_number(number, number - 1) # 返回值 return num# 主模块if __name__ == "__main__": # 数字列表 num_list = [1, 2, 3, 4, 5] # 对应的概率列表 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1] # 函数调用 n = get_number_by_pro(number_list=num_list, pro_list=pr_list) # 打印结果 print(n) # 结果:3.49683787011193。
展开阅读全文