Python 随机数抽取

#两种随机数抽取方法,第一种为指定区间,并在区间中可以刨除指定数,第二种为指定数序中抽取。每抽取一个数字进行全部洗牌。百度博客不再对外公开,转战这里了~


import os,random,sys



class element:

def __init__(self,forward,behind):

self.forward = forward;
self.behind = behind;

def __del__(self):

self.forward = None;
self.behind = None;
self.data = None;

def addPointer(self):
if self.forward != None:
self.forward.setBehindPointer(self);

def setBehindPointer(self,behind):
self.behind = behind;

def setForwardPointer(self,forward):
self.forward = forward;

def setData(self,num):
self.data = num;

def getBehind(self):
return self.behind;

def getForward(self):
return self.forward;

def getData(self):
return self.data;

def delete(self):

if self.forward != None:
self.forward.setBehindPointer(self.behind);
else:
if self.behind != None:
self.behind.setForwardPointer(None);
HeadPointer[0] = self.behind;

if self.behind != None:
self.behind.setForwardPointer(self.forward);
else:
if self.forward != None:
self.forward.setBehindPointer(None);
EndPointer[0] = self.forward;

def fromStrToNumList(NumStr):
rnum = [];
tnum = '';

for i in NumStr:
if ' ' == i:
if '' != tnum:
rnum.append(int(tnum));
tnum = '';
continue;
else:
 tnum = tnum+i;

rnum.sort();
return rnum;


def printList(treeList):


#sys.stdout.write("%d "%(treeList.getData()));
print treeList.getData(), ;

while treeList.behind != None:
treeList = treeList.getBehind();
print treeList.getData(), ;

print "";

def Shuffle(treeList):
if sumNum == 1:
return;

for i in range(1,sumNum*2):
t1 = random.randint(0,sumNum-1);
t2 = random.randint(0,sumNum-1);

t1Pointer = t2Pointer = treeList;

#print "t1=%d t2=%d" % (t1,t2);

if t1==t2:
continue;

while t1>0:
t1Pointer = t1Pointer.getBehind();
t1 -= 1;

while t2>0:
t2Pointer = t2Pointer.getBehind();
t2 -= 1;

#print "t1p=%d t2p=%d" % (t1Pointer.getData(),t2Pointer.getData());
tNum = t1Pointer.getData();
t1Pointer.setData(t2Pointer.getData());
t2Pointer.setData(tNum);


if __name__ == "__main__":
print "@ by ShadowZ 2015/6/10";

mode = input("mode(1/2): ");
sumNum = 0;

CurrentPointer = element(None,None);
HeadPointer = [CurrentPointer];
EndPointer = [CurrentPointer];

if mode == 1:

start = input("Input start: ");
end = input("Input end: ");

if start >= end:
print "!!start must less then end!!";
exit(1);

selectNum = input("Randomly selected num: ");
removeNumStr = raw_input("remove num: ")+' '

removeNum = fromStrToNumList(removeNumStr);
#print removeNum;

elements = [];

for i in range(start,end+1):

CurrentPointer.addPointer();
#EndPointer[0] = CurrentPointer;

for r in removeNum:
if i == r:
i = -1;
del removeNum[0];
break;

if i == -1:
continue;


CurrentPointer.setData(i);
sumNum += 1;
CurrentPointer = element(CurrentPointer,None);

EndPointer[0] = CurrentPointer.getForward();
del CurrentPointer;

elif mode == 2:

assignNumStr = raw_input("Assign num: ")+' ';
selectNum = input("Randomly selected num: ");

assignNum = fromStrToNumList(assignNumStr);

for i in assignNum:
CurrentPointer.addPointer();
CurrentPointer.setData(i);
sumNum += 1;
CurrentPointer = element(CurrentPointer,None);

EndPointer[0] = CurrentPointer.getForward();
del CurrentPointer;

else:
print "!!this mode not define!!";
exit(1);

#printList(HeadPointer[0]);

deal = [];

for i in range(0,selectNum):


Shuffle(HeadPointer[0]);

choice = random.randint(0,sumNum-1);


CurrentPointer = HeadPointer[0];
while choice > 0:
CurrentPointer = CurrentPointer.getBehind();
choice -= 1;

deal.append(CurrentPointer.getData());


CurrentPointer.delete();
del CurrentPointer;
sumNum -= 1;

deal.sort();

print "result: ",;
for i in range(0,len(deal)):
print deal[i],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值